我有这段代码:
var newProduct = new Product();
newProduct.Name = "product name";
newProduct.Description = "product descvription";
ProductImpl.Insert(newProduct);
var ingredient1 = new Ingredient { Description = "ingredient 1" };
var ingredient2 = new Ingredient { Description = "ingredient 2" };
var ingredient3 = new Ingredient { Description = "ingredient 3" };
IngredientImpl.Insert(ingredient1);
IngredientImpl.Insert(ingredient2);
IngredientImpl.Insert(ingredient3);
newProduct.Ingredients.Add(ingredient1);
newProduct.Ingredients.Add(ingredient2);
newProduct.Ingredients.Add(ingredient3);
ProductImpl.Update(newProduct);
当我写newProduct.Ingredient.Add时,我怎么办才能在Ingredient表中添加新成分?因为当我这样做时,我的食材表会有六个。
IngredientImpl.Insert:
public void Insert(Ingredient ingredient)
{
Validate(ingredient);
_repository.Insert(ingredient);
}
存储库:
public void Insert(Ingredient ingredient)
{
db.Ingredient.Add(ingredient);
db.SaveChanges();
}
ProductImpl:
public void Update(Product produto)
{
Validate(produto);
_repository.Update(produto);
}
存储库:
public void Update(Product product)
{
db.Entry(product).State = EntityState.Modified;
SaveChanges();
}
答案 0 :(得分:1)
看到您之前的一些问题,您似乎正在努力构建数据访问逻辑。显然,您已为Ingredient
和Product
选择了单独的存储库。我假设两者都有自己的背景。
如果你想坚持这种严格的分离(可能是完全理智的),你必须首先使用Ingredient储存库插入成分。之后,您可以将它们附加到产品存储库中的上下文中,将它们添加到newProduct.Ingredients
并保存。
请注意,您将有两笔交易。如果您认为配料可以拥有自己的生命,那么可以插入新的配料,而不管随后产品插入失败。