0

JulieLermansの著書ProgrammingEntityFramework:Dbcontextで読んだEFリポジトリパターンに従いました。

エンティティFavoriteと多対多の関係を持つCustomerというエンティティがあります

これがお客様へのアップデートのサンプルコードです

customer.CustomerLocation_ID = 5;     

customer.Favourites.clear();

customer.State = State.Modified;
customerRepository.InsertOrUpdate(customer);

次に、Insertは次のことを行います。

Entry(entity).State = EntityState.Modified;

foreach (var entity in this.ChangeTracker.Entries<IEntityState>())
{
    IEntityState stateInfo = entity.Entity;
    entity.State = StateHelpers.ConvertState(stateInfo.State);
}

そして最後に:

context.SaveChanges();

お気に入りの名前が一意であるため、保存時にお気に入りで一意のキーの例外が発生します。しかし、私はお気に入りに何も追加していません。

.clear()行を削除すると、すべてが正常に保存されます。

アップデート:

このコードにいくつか試してみたところ、うまくいきました。

foreach (var fav in customer.Favourites)
{
     fav.State = State.Modified;
}

顧客に影響を与えている場合でも、お気に入りを変更済みとしてマークして、追跡および更新する必要があるということですか?私はこれをしなければならないと思っていました。

4

1 に答える 1

0

Entity Framework を使用している場合は、次のように簡単に実行できます。

using(var myContext = new MySiteDbContextClassName())
{
     var selectedCustomer = myContext.Customers.FirstOrDefault(x => x.CustomerId == someCustomerId);

     if(selectedCustomer != null)
     {
          selectedCustomer.Favorites.Clear();
          myContext.SaveChanges();
     }
}

それが機能しない場合は、構成/マッピングに何か問題があるように思われるため、構成を確認する必要があります。

于 2012-10-31T17:04:27.617 に答える