0

画像には多くのギャラリーがあり、ギャラリーには多くの画像があります。ギャラリーの画像を更新しようとしています。以下のコードは機能しますが、やや不器用に感じます。

   var g=db.Galleries.Find(gal.Id);

   var ims = gal.Images.Select(i => db.Images.Where(im => im.Id == i.Id && im.User.Id == user.Id)).SelectMany(im => im).ToList();

   g.Name = gal.Name;

   g.Images.Clear();

   foreach (var im in ims)
   {
        g.Images.Add(im);
   }

   db.SaveChanges();

私がこれをするとき:

g.Images=ims;

それ以外の:

   g.Images.Clear();

   foreach (var im in ims)
   {
        g.Images.Add(im);
   }

例外がスローされます:

Violation of PRIMARY KEY constraint 'PK_GalleryImages'. Cannot insert duplicate key in object 'dbo.GalleryImages'.

理由を説明できますか?これにアプローチするためのより良い方法はありますか?

4

1 に答える 1

1

これを行うと、エンティティフレームワークは、テーブルに新しい行がまだ存在しない場合は、テーブルにg.Images.Add(im)新しい行を追加します。galleryIdimageIddbo.GalleryImages

一方、g.Images=imsそうすると、実際にはエンティティフレームワークに新しいリレーション(GalleryImagesテーブルの新しい行)を追加するように指示します。ギャラリーに新しい画像を追加する場合は、g.Images=ims問題なく機能します。

于 2012-09-26T02:05:59.577 に答える