Linq to SQL - 插入具有关系的实体

时间:2010-05-20 14:25:42

标签: c# linq-to-sql

请考虑以下表格(Visual Studio中dbml文件编辑器的屏幕截图):

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 个答案:

答案 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();

请注意,您可以使用方法添加部分类实现,以便从使用它的类中隐藏此行为。您希望在内部作用域关联,然后公开一些公共方法来添加/删除与内部关联一起使用的成分,如上所述。

答案 1 :(得分:0)

azamsharp是正确的,因为它不支持多对多,但是这个link在某种程度上表明它是如何完成的,基本上你将手工制作一些代码