2013-08-19 29 views
-1

我有我的MVC4項目如下POCO:MVC 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; } 
} 

如果我創建一個新畫廊的實體,該圖片集爲空。我如何添加一個新的圖像(在我的情況下)到未初始化的列表? 我添加像這個樣子代碼:

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(); 

在運行時的代碼改變了這個異常(對不起僅在德語):

艾因OBJEKT VOM典型值「System.Collections.Generic.List` 1 [[gallery.Models.GalleryImage,gallery,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'kannfüreine EntityReference vom Typ'gallery.Models.GalleryImage'nicht als Value-Eigenschaft festgelegt oder daraus entfernt werden 。

現在如何添加一個新項目到一個未初始化的集合?

回答

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並且更加防禦性的是:檢查它是否爲null。

然而,你還有更多的問題,一旦你加載圖庫,你可以添加庫圖像到圖像,然後調用db.savechanges();

+0

非常感謝!刪除屬性解決了問題。我也實現了額外的技巧,儘管TryParse的GUID不是必需的,因爲我已經在我的路由配置中創建了一個約束控制器的行爲,它已經驗證了guid。 – DARKHalf