我尝试使用实体框架更新关系,但我没有成功。
我有一个名为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);
}
并且房屋价值被编辑,除了导航属性,我没有成功改变与街道的关系,我想改变房子街。
我该怎么做?
答案 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);
}