更新实体不会更新导航属性 - 实体框架

时间:2013-01-13 01:13:21

标签: asp.net-mvc entity-framework entity-framework-4

我尝试使用实体框架更新关系,但我没有成功。

我有一个名为Houses的实体,这些House就在街上。

街道上可以有很多房屋。

我用它来更新Houses的值

    [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);
    }

并且房屋价值被编辑,除了导航属性,我没有成功改变与街道的关系,我想改变房子街。

我该怎么做?

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

Id属性是否设置为映射中的数据库生成?

如果您使用DatabaseGeneratedOption.Identity属性标记了该属性,则不会保存该属性。

或者,如果您尝试更改实际的街道对象,则应加载所需的街道对象并将该属性指定为填充:

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