实体模型继承的类内的私有设置器似乎会导致 EFCore 迁移出现奇怪的问题。考虑以下示例,其中有多个类 (Bar
and Baz
)继承自Foo
。跑步时Add-Migration
多次命令(添加/删除private
修饰符`),生成的模式在多个方面都是错误的。
- 有时,
Created
属性设置为删除列
- 有时all的
Created
属性设置为被删除(并且不被任何内容替换/重命名)。
据我了解,EFCore 工具并没有真正以任何特殊的方式对待私有设置器的属性。这是一个错误的假设吗?如果是这样,为什么要这样做some私有设置器适用于基类,但不适用于其他类?我假设这是 EF 工具中的一个错误,可能与它如何处理属性命名有关,考虑到我在模型中还有其他名称相似的属性,这可能会使工具感到困惑
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 的私有设置器导致 EF Tools 永远不会将它们映射到基类中。但是,我有一个带有私有设置器的字符串属性[Required]
and [StringLength]
属性,以及builder.Entity<Foo>().HasAlternateKey(x => x.RequiredStringProperty);
在这种情况下,EF 绝对映射该属性...但仅限于继承自的某些类Foo
.
EF 核心工具仅在某些条件下才会映射基类的私有 setter。
例如,如果您有builder.Entity<Bar>().HasAlternateKey(x => x.Created);
,然后 EF 工具将映射Created
财产,无论它是否有私人或公共 setter。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)