2010-06-21 72 views
3

考慮處理房屋和圖片的應用程序。名爲House的實體與HousePicture的關係具有1:n的關係。實體框架:更新實體的子集合的一對多關係

該應用程序允許用戶創建和編輯House,並添加/刪除HousePictures

[HttpPost] 
public ActionMethod Edit(House h) 
{ 
    //get an attached entity from the DB first. 
    House original = db.Houses.SingleOrDefault(x=>x.ID==h.ID); 

    UpdateModel(original); 

    //collect all the uploaded pictures. 
    original.HousePictures = GatherPicturesFromForm(); 


    db.SaveChanges(); 
    // the changes for the House are saved, 
    //but child collection Pictures are not. 
} 

你怎麼去更新 - 從頭重新子集合當孩子收集 - 添加新&刪除?

  • Add() or Attach()對於集合中的每個孩子?
  • 您需要以什麼順序添加或附加父實體與子集合?
  • 如何去檢測孩子去除?這是EF4的一個功能,刪除是由框架自動發生的,還是開發人員需要編寫這種邏輯?
  • 添加多個HousePicture時,其ID == 0.實體具有SQL Server中的主鍵具有int IDENTITY(1,1)的自動分配PK。這成爲一個問題,因爲EF4認爲2+孩子有相同的ID。

  • 對於使用實體框架4保存子集合的建議是什麼?

  • 有關在更新/添加/刪除時如何使1:n集合的持久性更容易的其他建議?
+0

你是怎麼解決這個問題的?保存EntityCollection回到數據庫? – 2011-04-04 10:29:46

回答

0

在EF中,只需將新對象添加到集合中,它們就會自動使用正確的外鍵值持久保存到數據庫。

original.HousePictures.AddRange(GatherPicturesFromForm());

+0

謝謝...這是否包括刪除當數據庫中的子對象不存在於'新'集? – 2010-06-21 18:21:10

+0

人們會認爲,特別是如果OI外鍵需要在子對象上的關係。 – 2010-06-21 21:02:18

+0

不幸'EntityCollection '沒有'AddRange()' – 2010-06-22 02:58:17