2

我正在尝试使用 Entity Framework 更新关系,但没有成功。

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

街道可以有很多房子。

我用它来更新房屋的价值

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

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

我怎样才能做到这一点?

4

2 回答 2

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
}
于 2013-01-13T01:20:56.680 回答
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);
}
于 2013-01-13T01:23:08.800 回答