2013-01-13 83 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); 
}