-1

我的 MVC4 项目中有以下 POCO:

public class Gallery : ModelBase
{
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsPublic { get; set; }
    public string ThumbnailPath { get; set; }

    [ForeignKey("Id")]
    public ICollection<GalleryImage> Images { get; set; }
}

如果我创建一个新的 Gallery 实体,则 Images Collection 为空。如何将新图像(在我的情况下)添加到未初始化列表中?我的添加代码如下所示:

Guid gGallery = Guid.Parse(Request.Form.GetValues("galleryId")[0]);
            Gallery gallery = db.Galleries.Where(g => g.Id == gGallery).Include(g => g.Images).First();

            galleryimage.Id = Guid.NewGuid();
            galleryimage.CreatedByUserId = WebSecurity.CurrentUserId;
            galleryimage.InsertDate = DateTime.Now;
            galleryimage.LastModDate = DateTime.Now;

            db.GalleryImages.Add(galleryimage);
            if (gallery.Images == null)
                gallery.Images = new List<GalleryImage>();
            gallery.Images.Add(galleryimage);

            db.SaveChanges();

代码在运行时中断,出现此异常(对不起,仅限德语):

Ein Objekt vom Typ 'System.Collections.Generic.List`1[[gallery.Models.GalleryImage, gallery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' kann für eine EntityReference vom Typ 'gallery.Models .GalleryImage' nicht 作为 Value-Eigenschaft festgelegt oder daraus entfernt werden。

现在如何将新项目添加到未初始化的集合中?

4

1 回答 1

0

你的 POCO 有问题,应该如下:

public class Gallery : ModelBase
{
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsPublic { get; set; }
    public string ThumbnailPath { get; set; }

    // remove the ForeignKey attr. That should be in GalleryImage itself
    public ICollection<GalleryImage> Images { get; set; }
}

那么你的代码中有很多问题。

首先,您应该使用Guid.TryParse或验证 Guid 是有效的 Guid。

然后你应该使用Request.Form.GetValues("galleryId")[0]它可以获得NPE。

此外,你应该避免使用First(),你应该使用FirstOrDefault并且更加防御,是:检查它是否为空。

然而,你有更多的问题,一旦你加载画廊,你可以将画廊图像添加到图像,然后调用 db.savechanges();

于 2013-08-19T19:34:38.307 回答