Я столкнулся с аналогичной ситуацией, когда работал с базой данных с 8 различными таблицами с первичным ключом и 8 ограничениями внешнего ключа.
Все 8 таблиц имели одинаковые имена столбцов и ограничения внешнего ключа, только с их полями данных и полями первичного ключа с разными именами / типами столбцов и т. Д.
Я хотел создать SQL Linq DataContext с сущностями для него, но мне не хотелось определять одинаковые 8 столбцов для каждого типа. Поэтому я поместил их в базовый тип XYZDataEntryEntity.
Я столкнулся с этой ошибкой, поэтому у меня возникла идея: я сделал все столбцы в базовом классе виртуальными. Я пометил их атрибутами Column в базовом классе, и я просто переопределил их в классах derrived, например
public override int InstitutionID
{
get
{
return base.InstitutionID;
}
set
{
base.InstitutionID = value;
}
}
Затем я получил жалобы, потому что личное поле не было доступно, например,
[Column (Storage = "_XYZStatus", DbType = "Int NOT NULL =", Name = "Column_Name_here")]]
_XYZStatus не был доступен, и я подумал, да, потому что он в базовом классе.
Таким образом, я сделал _XYZStatus защищенным, а не закрытым, чтобы его мог видеть класс, и как магия. Все работало.
Конечно, мне нужно переопределить те же 8 свойств в каждом классе, чтобы они работали, но мне нужно только внести изменения в них в базовом классе, и это по крайней мере связывает их все с одним и тем же базовым классом и одинаковыми свойства.