2012-06-17 2 views
2

У меня есть Entity структура как нижеEntity Framework моделирование данных лучшие практики

public abstract class Entity 
{ 
    public int Id { get; set; } 
} 

public class User : Entity 
{ 
    public ICollection<Product> Products { get; set; } 
} 

public class Warehouse : Entity 
{ 
    public ICollection<Product> Products { get; set; } 
} 

public class Product : Entity 
{ 
    public Warehouse Warehouse { get; set; } 

    public User User { get; set; } 
} 

Как вы можете видеть Пользователь может есть продукты и склад также может иметь продукты. Таким образом, структура Entity помещает 2 внешних ключа в таблицу Product, которая может быть нулевой.

Мы также могли бы достичь похожую структуру по кусочкам различного моделирования объекта, как показано ниже

public class User : Entity 
{ 
    public ICollection<UserProduct> Products { get; set; } 
} 

public class Warehouse : Entity 
{ 
    public ICollection<WarehouseProduct> Products { get; set; } 
} 

public class Product : Entity 
{ 

} 

public class WarehouseProduct : Entity 
{ 
    public Product Product { get; set; } 
    public Warehouse Warehouse { get; set; } 
} 

public class UserProduct : Entity 
{ 
    public Product Product { get; set; } 
    public User user { get; set; } 
} 

Первый дизайн выглядеть проще, не вводить новые entitties, но не уверен, что это лучше или нет.

Я пытаюсь найти, что лучше, или что обрезание делает его одним из лучших, чем другие.

ответ

1

Наследование также возможно (EF/CodeFirst):

public abstract class Entity 
{ 
    public int Id { get; set; } 
} 

public class Product : Entity 
{ 

} 

public class Warehouse : Product 
{ 
    /* all product fields are available */ 
} 

public class User : Product 
{ 
    /* all product fields are available */ 
} 

это более DRY в моей точки зрения => "CodeFirst вид".

good post о Наследие: http://goo.gl/1igQ3

Смежные вопросы