Код EF Первая Карта 1 до 0 с наследованием - PullRequest
1 голос
/ 28 февраля 2012

EF 4.1

У меня есть Product Table, продукт может быть разных типов, например, скажем, Shirt and Pants. Я считаю, что это называется SuperType и SubType

Продукты (1..1: 0) ProductShirt

Товары (1..1: 0) ProductPants

, например

Products
--------
ProductId (PK)
Product Name
Product Type (1 or 2, let's say 1 is Shirt, 2 is Pants)

ProductShirtType
----------------
ProductId (PK, FK)
HasShortSleeves
etc....

ProductPantsType
----------------
ProductId (PK, FK)
IsCargoPants
etc...

Я пытаюсь смоделировать это в EF CF, и таблица для каждого типа (TPT) соответствует этим требованиям. Проблема, с которой я сталкиваюсь, заключается в том, что пользователь может менять типы продуктов, и, согласно ответу Ладислава Мрнки, это невозможно, и вместо этого следует отдать предпочтение композиции:

Модель Entity Framework с наследованием таблиц для типов

Что здорово, теперь мои модели выглядят так:

public class Product {
  public int Id { get; set; }
  public string Name { get; set; }
  public int ProductType { get; set; }
  public virtual ProductSubType SubType {get; set;}
}

public abstract class ProductSubType {
  public int Id { get; set; }
  public virtual Product Product {get; set;}
}

public class ProductShirt : ProductSubType {
  public bool HasShortSleeves { get; set; }
}

public class ProductPants : ProductSubType {
  public bool IsCargoPants { get; set; }
}

Я не знаю, как отобразить абстрактный тип и подтипы. И так же важно, как я могу переходить с одного типа продукта на другой.

...