簡體   English   中英

實體框架多對多更新

[英]Entity Framework Many-to-many update

一個圖像有很多圖庫,一個畫廊有很多圖像。 我正在嘗試更新圖庫中的圖像。 下面的代碼可以工作,但是有點笨拙。

   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'.

你能解釋為什么嗎? 有沒有更好的方法來解決這個問題?

當您執行g.Images.Add(im) ,實體框架將在dbo.GalleryImages表中添加一個帶有galleryIdimageId的新行(如果該表中尚不存在)。

另一方面,當您執行g.Images=ims ,您實際上是在告訴實體框架添加新關系(GalleryImages表中的新行)。 如果要將新圖像添加到圖庫中,則g.Images=ims可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM