ADO EF Code First Generic Intermediate Class Inheritance mapping

У меня есть следующее требование, которое хорошо работает в объектно-ориентированном пространстве, но я не могу заставить его отображать обратно в БД, используя сначала код ADO EF .

У меня есть множество продуктов, каждый из которых будет иметь разные аспекты (атрибуты, но не в смысле атрибутов кода). Например, кольцо будет иметь такие аспекты, как тип минерала = золото и т. Д., В то время как алмаз будет иметь степень чистоты = VVSI1.

Как вы можете видеть, продукты очень сильно отличаются по своему составу, и мне нужен динамичный способ роста моей системы.

Таким образом, я создал класс продукта:

public class Product
{
    public int id { get; set; }
    public string Name { get; set; }
    private List<ProductAspect> aspects = new List<ProductAspect>();
    public List<ProductAspect> Aspects { get { return aspects; } set { aspects = value; } }
}

У него есть список ProductAspect, который является базовым классом для всех будущих аспектов:

public class ProductAspect 
{
    public int id { get; set; }
    public string AspectName { get; set; }
}

Затем я наследую от ProductAspect, используя универсальный, который позволяет мне конкретное (строго типизированное) значение моего аспекта:

public abstract class ProductAspect<T> : ProductAspect
{
    public T AspectValue { get; set; }
}

Затем я создаю некоторые аспекты, которые позволят мне украсить мой продукт:

public class StringAspect : ProductAspect<string> { };
public class DecimalAspect : ProductAspect<decimal> { };
public class ImageAspect : ProductAspect<byte[]> { };

Затем я пробую DbContext и пробовал сопоставления наследования TPH и TPC.

Ни то, ни другое не работают. Модель БД, которая получает ' существуют в EntitySet 'IxamDataContext.Aspects'. Параметр name: entity

Какие-нибудь идеи от первого плюса кода EF?

6
задан Ladislav Mrnka 25 April 2011 в 13:56
поделиться