mvc poco list为null:添加新项目

时间:2013-08-19 19:30:46

标签: asp.net asp.net-mvc collections poco

我的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为null。如何在未初始化列表中添加新图像(在我的情况下)? 我添加的代码如下所示:

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]]'kannfüreineEntityReference vom Typ' gallery.Models.GalleryImage'nicht als Value-Eigenschaft festgelegt oder daraus entfernt werden。

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

1 个答案:

答案 0 :(得分: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();