У меня есть абстрактный базовый класс с закрытым полем, который я хотел бы добавить в свою базу данных для каждого наследуемого класса.В настоящее время я получаю следующую ошибку
Свойство '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());
}
После выполнения добавления-миграции my_migration я получаю сообщение об ошибке выше.Я попытался изменить уровень доступа BaseField на защищенный или внутренний, и они оба вызвали одну и ту же ошибку.Тем не менее, изменение его на public правильно создало миграцию, включая собственное приватное поле ChildClass.
AddColumn("dbo.ChildClass", "ChildField", c => c.String());
AddColumn("dbo.ChildClass", "BaseField", c => c.String());
Однако я не хочу, чтобы классы за пределами моей библиотеки могли иметь прямой доступ к BaseField.Как я могу решить эту проблему?