2010-05-20 3 views
0

Рассмотрим следующие таблицы (скриншот DBML редактор файлов в Visual Studio):Linq к SQL - Вставка субъектов с отношениями

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 } 

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

+0

Возможно, я ошибаюсь, но я не думаю, что многие отношения поддерживаются в Linq 2 SQL. – azamsharp

+0

@azamsharp - не напрямую, но вы можете использовать два отношения «один ко многим», чтобы получить тот же эффект. – tvanfosson

+0

Ваше изображение повреждено –

ответ

1

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

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

azamsharp правильно в том, что он не поддерживает многие ко многим, однако это link идет какой-то способ, чтобы показать, как это можно сделать, по существу, вы будете Артизанальное часть кода

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