具有私有setter的EFCore Base實體模型屬性 - 遷移奇異行為

c# entity-framework-core

實體模型繼承的類中的私有setter似乎導致EFCore遷移的奇怪問題。請考慮以下示例,其中有多個類( BarBaz )從Foo繼承。多次運行Add-Migration命令時(添加/刪除private修飾符`),生成的模式在多種方面都是錯誤的。

  • 有時, Created屬性設置為已刪除的列
  • 有時, 所有 Created屬性都被設置為被刪除(並且不會被替換/重命名)。

我的理解是,EFCore工具並沒有真正用私人制定者對待屬性。這是一個錯誤的假設嗎?如果是這樣,為什麼一些私人制定者會在基類上工作,而不是其他人呢?我假設這是EF Tools中的一個錯誤,可能與它如何處理屬性命名有關,考慮到我在模型中有其他類似名稱的屬性可能會混淆工具

public class Context : DbContext
{
    public DbSet<Bar> Bars { get; set; }
    public DbSet<Baz> Bazs { get; set; }
}

public class Bar : Foo { }
public class Baz : Foo { }
public abstract class Foo
{
    protected Foo()
    {
        Created = DateTimeOffset.UtcNow;
    }
    public DateTimeOffset? Created { get; private set; }
    public DateTimeOffset? Updated { get; set; }
}

編輯 - >似乎DateTimeOffset的私有setter導致EF Tools從不在基類中映射它們。但是,我有一個帶有[Required][StringLength]屬性的私有setter的字符串屬性,以及builder.Entity<Foo>().HasAlternateKey(x => x.RequiredStringProperty);在這種情況下,EF絕對映射屬性...但只有一些繼承自Foo的類。

熱門答案

EF核心工具僅在特定條件下映射私有的基類設置器。

例如,如果你有builder.Entity<Bar>().HasAlternateKey(x => x.Created); ,然後EF工具將映射Created屬性,無論它是否具有私有或公共setter。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow