2010-05-20 70 views
0

考虑以下表(在Visual Studio DBML文件编辑器的截图):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 2010-05-20 14:28:01

+0

@azamsharp - 不是直接的,但可以使用两个一对多关系来获得相同的效果。 – tvanfosson 2010-05-20 14:36:37

+0

您的图像损坏 – 2015-12-21 11:52:59

回答

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在某种程度上表明它是如何完成的,基本上你将手工编写一些代码