2013-01-13 172 views
2

我試圖更新使用實體框架的關係,但我沒有成功。更新實體不更新導航屬性 - 實體框架

我有一個名爲房屋的實體,這些房子在一條街上。

街道可以有很多房屋。

我用它來更新房屋

[HttpPost] 
    public ActionResult Edit(Houses house) 
    { 
     if (ModelState.IsValid) 
     { 
      house.Color = "Yellow"; 
      house.Street.Id = 2; //It does not update, why? 

      db.HousesSet.Attach(house); 

      db.ObjectStateManager.ChangeObjectState(house, EntityState.Modified); 

      db.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 
     return View(house); 
    } 

和房屋的價值進行編輯,除由導航屬性的值,我沒有成功改變與街道的關係,我想改變房子的街道。

我該怎麼做?

回答

0

嘗試從街道對象中添加它。

[HttpPost] 
public ActionResult Edit(Houses house) 
{ 
    if(ModelState.IsValid) 
    { 
     var street = db.Street.Include("Houses").Where(c => c.Id == house.Street.Id).FirstOrDefault; 
     street.Houses.Add(new House{ houseSfuffGoesHere}); 
     db.SaveChanges(); 
    } 
    //whatever else you wanted to do 
} 
0

Id屬性是否由映射中的數據庫生成?

如果您使用屬性DatabaseGeneratedOption.Identity標記了該屬性,則不會保存該屬性。

另外,如果你想改變的實際街道的對象,那麼你就應該加載街道對象,你想和分配的財產fillows:

public ActionResult Edit(Houses house) 
{ 
    if (ModelState.IsValid) 
    { 

     var street = db.StreetsSet.First(2); 
     house.Color = "Yellow"; 

     house.Street = street; 

     db.HousesSet.Attach(house); 

     db.ObjectStateManager.ChangeObjectState(house, EntityState.Modified); 

     db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    return View(apartamentos); 
}