我的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。
现在如何将新项目添加到未初始化的集合中?
答案 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();