Linq to SQL - вставка сущностей со многими ко многим - PullRequest
0 голосов
/ 20 мая 2010

Рассмотрим следующие таблицы (снимок экрана редактора файлов dbml в Visual Studio):

http://roosteronacid.com/dbml.png

Таблица IngredientsRecipesRelation - это таблица «многие ко многим», связывающая ингредиенты n с одним рецептом.


Как бы вы вставили следующий рецепт ...:

Recipe { Name = "Dough" }

Со следующими ингредиентами ...:

Ingredient { Name = "water", Unit = "cups", Amount = 2.0 },
Ingredient { Name = "flour", Unit = "cups", Amount = 6.0 },
Ingredient { Name = "salt", Unit = "teaspoon", Amount = 2.0 }

... В базу данных?

Ответы [ 2 ]

1 голос
/ 20 мая 2010

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

var recipe = new Recipe { Name = "Dough" };

var ingredients = new []
{ 
   new Ingredient { Name = "water", Unit = "cups", Amount = 2.0 }, 
   new Ingredient { Name = "flour", Unit = "cups", Amount = 6.0 }, 
   new Ingredient { Name = "salt", Unit = "teaspoon", Amount = 2.0 }
};

foreach (var ingredient in ingredients)
{
   var relation = new IngredientsRecipesRelations();

   relation.Ingredient = ingredient;

   recipe.IngredientsRecipesRelations.Add(relation);
}

DataContext.Recipes.InsertOnSubmit(recipe);
DataContext.SubmitChanges();

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

0 голосов
/ 20 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...