1

私はこのコードを持っています:

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 テーブルに新しい成分が追加されないようにするにはどうすればよいですか? 私がそうするとき、私の食材テーブルには6つあるからです。


IngredientImpl.Insert:

public void Insert(Ingredient ingredient)
{
    Validate(ingredient);

    _repository.Insert(ingredient);
}

リポジトリ:

public void Insert(Ingredient ingredient)
{
    db.Ingredient.Add(ingredient);

    db.SaveChanges();
}

製品実装:

public void Update(Product produto)
{
    Validate(produto);

    _repository.Update(produto);
}

リポジトリ:

public void Update(Product product)
{
    db.Entry(product).State = EntityState.Modified;

    SaveChanges();
}
4

1 に答える 1

1

以前の質問のいくつかを見ると、データ アクセス ロジックを設計する方法に苦労しているようです。Ingredientどうやら、との別々のリポジトリを選択したようですProduct。どちらも独自のコンテキストを持っていると思います。

この厳密な分離を維持したい場合 (完全に正気かもしれません)、Ingredient リポジトリを使用して、最初に成分を挿入する必要があります。その後、それらを製品リポジトリのコンテキストにアタッチし、追加してnewProduct.Ingredients保存できます。

2 つのトランザクションがあることに注意してください。成分が独自の寿命を持ち、その後の製品挿入の失敗に関係なく、新しい成分を挿入できると判断した場合、それは問題ありません。

于 2012-05-23T20:42:22.530 に答える