我有一个带有私有字段的抽象基类,我想为每个继承类将其添加到我的数据库中。我目前收到以下错误
属性“ BaseField”不是类型为“ ChildClass”的已声明属性。通过使用Ignore方法或NotMappedAttribute数据批注,验证该属性未明确从模型中排除。确保它是有效的原始属性。
这是我当前(且需要)的设置:
span
然后在我的DbContext中
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);
}
}
}
执行添加迁移my_migration后,出现上述错误。 我尝试将BaseField的访问级别更改为protected或internal,它们都导致相同的错误。但是,将其更改为公开可以正确构建迁移,包括ChildClass自己的私有字段。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new ChildClass.ChildClassConfiguration());
}
但是,我不希望库外的类能够直接访问BaseField。我该如何解决这个问题?
答案 0 :(得分:0)
在您的代码示例中,类型ChildClass
不包含名为BaseField.
的字段或变量,它包含名为ChildField
的字段。
我可以看到BaseClass
包含一个BaseField
,但是它被标记为私有,这意味着它没有被继承。如果您希望将其继承,请将其标记为受保护或公开。