Entity Framework - Сложная модель, использующая сначала код - PullRequest
2 голосов
/ 23 февраля 2012

Добрый день, ребята,

У меня есть довольно специфическая модель данных, которую я пытаюсь создать в классах POCO, и я испробовал так много разных подходов и посетил так много веб-сайтов, но ни один из них не соответствует моему конкретному примеру.

Так что я собираюсь выбросить это и надеяться, что кто-то может мне помочь.

У меня есть продукты, а в продуктах есть ингредиенты. Однако в нашем бизнесе эти продукты могут поставляться разными поставщиками, каждый из которых имеет несколько различный набор ингредиентов.

Итак, у меня есть базовые классы:

public class Product
{  
    public int ProductID { get; set; }
    public string ProductNumber { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Supplier> Suppliers { get; set; }
}

public class Vendor
{
    public int VendorID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Supplier> Suppliers { get; set; }
}

public class Ingredient
{
    public int IngredientID { get; set; }        
    public string Name { get; set; }
}

public class Supplier
{
    public int SupplierID { get; set; }

    public virtual ICollection<Product> Products { get; set; }
    public virtual ICollection<Vendor> Vendors { get; set; }
}

Итак, как вы можете видеть, я дошел до того, что понял, что моей модели нужна сущность объединения, потому что мои ингредиенты поступают от определенного поставщика для продукта, мне нужна эта единица объединения, называемая поставщиком (я думаю).

Это то место, где я застреваю ... Мой продукт может поставляться одним или несколькими поставщиками. Каждый поставщик для каждого продукта будет иметь список ингредиентов для этого продукта

Я даже не могу понять, нужна мне сущность соединения или нет.

Что было бы замечательно, если бы я мог перемещаться по структуре данных следующим образом (или что-то подобное):

articles[1].Vendors[3].Ingredients;

Еще раз, я не знаю достаточно о Entity Framework, чтобы знать, возможно ли это.

То, как я это делаю сейчас, кажется ... неправильным. Как правильно делать то, что я хочу делать? Нужна ли мне таблица соединений или я могу каким-то образом перемещаться по ингредиентам для поставщика продукта, возможно, с помощью построителя моделей, чтобы сделать ссылку на продукт-> поставщик-> ингредиент обязательной?

Любая помощь будет принята с благодарностью!

Edit: Мне также кажется, что я недостаточно понимаю идеи отношений Entity Framework.

Таким образом, у одного продукта может быть несколько поставщиков, что является отношением «один ко многим». Но у Продавца может быть много продуктов. Так это на самом деле много ко многим?

Я определенно могу смоделировать то, что хочу сделать на сервере SQL Express, но я действительно хочу использовать Entity Framework. Мне просто нужно лучше понять мои требования к моделированию.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Это не проблема EF. Это общая задача сущности-отношения. Вы должны просто улучшить свою модель. Например, вы можете разделить Product на две сущности: ProductDefinition, ProductInstance

public class ProductDefinition
{  
    public int ProductID { get; set; }
    public string ProductNumber { get; set; }
    public string Description { get; set; }
    public virtual ICollection<ProductInstance> Instances { get; set; }
}


public class ProductInstance
{
    public int ProductInstanceID { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual ProductDefinition Definition { get; set; }
    public vritual ICollection<Ingredient> Ingredients { get; set; }
}

В вашей системе вы будете работать с ProductDefinition вместо оригинального Product. Это определение похоже на группу одинаковых продуктов и указывает на все возможные виды производства продуктов, предоставляемых разными поставщиками с различными ингредиентами.

Я не знаю вашего контекста, но кажется странным считать продукты с разными ингредиентами "одинаковыми".

0 голосов
/ 23 февраля 2012

Почему вы сначала используете код, а не проектируете базу данных в первую очередь? Может быть, это будет немного проще. Кроме того, я не вижу связи между Vendor и Ingredient или Product и Ingredient

Для моего понимания: Это новый продукт, когда продавец использует другие ингредиенты?

...