c# - 将抽象类中的私有字段添加到迁移
问题描述
我有一个带有私有字段的抽象基类,我想为每个继承类添加到我的数据库中。我目前收到以下错误
属性“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。我怎么解决这个问题?
解决方案
在您的代码示例中,该类型ChildClass
不包含名为的字段或变量BaseField.
它包含名为的字段ChildField
。
我可以看到BaseClass
包含 a BaseField
,但它被标记为私有,这意味着它不是继承的。如果您希望它被继承,请将其标记为受保护或公开。
推荐阅读
- android - Android studio arctic fox 在 Macbook Air M1 上抛出“原因:错误 = 86,可执行文件中的 CPU 类型错误”。有人遇到同样的问题吗?
- swift - onChange(of: perform:) 枚举在 swiftui 中不起作用
- django - django 创建视图使用更多模型
- java - 从 RxJava observable (Android) 设置 LiveData 值
- django - 如何仅从关注的用户返回文章?
- python - 如何使用python在mysql中更新?
- reactjs - 在 React 中将模态组件添加到卡片组件
- python - 如何解决python中的Tkinter问题?
- php - 使用 PaymentIntent 进行 Stripe 3d 安全支付
- c# - WPF MVVM:组合框 SelectedValue 绑定