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)添加一个带有galleryIdand的新行。imageIddbo.GalleryImages

另一方面,当你这样做时g.Images=ims,你实际上是在告诉实体框架添加一个新关系(GalleryImages 表中的新行)。如果您要将新图像添加到图库中,效果g.Images=ims会很好。

于 2012-09-26T02:05:59.577 回答