Я недавно начал использовать EF с Code First и столкнулся с этой проблемой, которая оставила меня в недоумении. Буду признателен за любые отзывы на эту тему, которые помогут мне в решении указанной проблемы.
Пожалуйста, рассмотрите следующий образец ....
public class SomeType
{
public SomeType()
{
Properties = new List<BaseProperty>();
}
public int PrimaryKey { get; set; }
public string Name { get; set; }
public List<BaseProperty> Properties { get; set; }
}
public abstract class BaseProperty
{
public int PrimaryKey { get; set; }
public string PropertyName { get; set; }
// FK set through Type Configuration File.
public SomeType ParentInstance { get; set; }
}
public class PropertyA : BaseProperty
{
// some unique properties.
}
public class PropertyB : BaseProperty
{
// some unique properties.
}
public class PropertyC : BaseProperty
{
// some unique properties.
}
public class PropertyD : BaseProperty
{
// some unique properties.
}
Все это прекрасно работает с соответствующими классами конфигурации типов, которые отображаются на 2 таблицы (1 для SomeType и вторая для BaseProperty вместе с оставшимися производными объектами посредством использования столбца дискриминатора).
Теперь, из-за обстоятельств, не зависящих от меня, я вынужден изменить «SomeType» на что-то подобное ...
public class SomeType
{
public SomeType()
{
PropertiesAB = new List<BaseProperty>();
PropertiesC = new List<PropertyC>();
PropertiesD = new List<PropertyD>();
}
public int PrimaryKey { get; set; }
public string Name { get; set; }
public List<BaseProperty> PropertiesAB { get; set; } // collection of PropertyA and PropertyB
public List<PropertyC> PropertiesC { get; set; } // collection of PropertyC
public List<PropertyD> PropertiesD { get; set; } // collection of PropertyD
}
Это было бы очень легко сделать в NHibernate с использованием пакетов, но есть ли эквивалентное значение для этого в EF с использованием Code First? Какие-нибудь мысли ?
Я не хочу писать свою собственную реализацию Коллекции, которая будет перенаправлять и манипулировать всеми операциями, которые должны выполняться над этими новыми списками, в основной список, который будет фактически отображен в базу данных.
Пожалуйста, игнорируйте любые отсутствующие "виртуальные" модификаторы или что-либо еще в приведенном выше коде, так как он предназначен только для примера и на самом деле НЕ является тем, что я использую.
Спасибо за ваши ответы.