【发布时间】:2019-07-28 14:29:10
【问题描述】:
我有一个带有私有字段的抽象基类,我想为每个继承类添加到我的数据库中。我目前收到以下错误
属性“BaseField”不是“ChildClass”类型的声明属性。使用 Ignore 方法或 NotMappedAttribute 数据注释验证该属性是否已从模型中显式排除。确保它是有效的原始属性。
这是我当前(和想要的)设置:
public abstract class BaseClass
{
private string BaseField{ get; set; }
internal class BaseClassConfiguration<T> : EntityTypeConfiguration<T> where T : BaseClass
{
internal BaseLogbookConfiguration()
{
Property(p => p.BaseField);
}
}
}
public class ChildClass : BaseClass
{
private string ChildField { get; set; }
internal class ChildClass : BaseClassConfiguration<ChildClass>
{
internal ChildClass ()
{
Property(p => p.ChieldField);
}
}
}
然后,在我的 DbContext 中
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ChildClass.ChildClassConfiguration());
}
在执行 add-migration my_migration 时,我收到上述错误。 我尝试将 BaseField 的访问级别更改为受保护或内部,它们都导致了相同的错误。但是,将其更改为 public 正确构建了迁移,包括 ChildClass 自己的私有字段。
AddColumn("dbo.ChildClass", "ChildField", c => c.String());
AddColumn("dbo.ChildClass", "BaseField", c => c.String());
但是,我不希望我的库之外的类能够直接访问 BaseField。我该如何解决这个问题?
【问题讨论】:
-
如果
add-migration不知道它存在,因为它在你的编译之外,它怎么知道访问它? -
我的 DBContext 中有
public DbSet<ChildClass> Child { get; set; },它之前检测到我的班级很好。添加私有字段是一种修改。我还尝试将base()添加到internal ChildClassConfiguration() : base(),结果没有变化。
标签: c# asp.net entity-framework ef-code-first