将私有字段从抽象类添加到迁移

时间:2019-03-06 20:03:50

标签: c# asp.net entity-framework ef-code-first

我有一个带有私有字段的抽象基类,我想为每个继承类将其添加到我的数据库中。我目前收到以下错误

属性“ 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。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在您的代码示例中,类型ChildClass不包含名为BaseField.的字段或变量,它包含名为ChildField的字段。

我可以看到BaseClass包含一个BaseField,但是它被标记为私有,这意味着它没有被继承。如果您希望将其继承,请将其标记为受保护或公开。