我真的希望有人能帮助我。从EditViewModelEF不保存更改
public ActionResult Edit(EditViewModel vm)
{
Item item= db.Items.Find(vm.ItemId);
if (ModelState.IsValid)
{
//breakpoint 1 --> everything works fine, if its debugged step by step from here
//if item´s contact is null or different from viewmodel --> override it
if (item.Contact == null || item.Contact.ContactId != vm.ContactId)
item.Contact = db.Contacts.Find(vm.ContactId);
//if the viewmodel have a ContractUnit set and its different from item´s --> override the contractunit
//is the ContractUnit in viewmodel null set item´s null too
if (vm.ContractUnitId.HasValue && ((item.ContractUnit != null && item.ContractUnit.ContractUnitId != vm.ContractUnitId) || item.ContractUnit == null))
item.ContractUnit = db.ContractUnits.Find(vm.ContractUnitId);
else
if (!vm.ContractUnitId.HasValue)
item.ContractUnit = null;
//same as above just for Building
if (vm.BuildingId.HasValue && ((item.Building != null && item.Building.BuildingId != vm.BuildingId) || item.Building == null))
item.Building = db.Buildings.Find(vm.BuildingId);
else
if (!vm.BuildingId.HasValue)
item.Building = null;
//same as above just for EconomicUnit
if (vm.EconomicUnitId.HasValue && ((item.EconomicUnit != null && item.EconomicUnit.EconomicUnitId != vm.EconomicUnitId) || item.EconomicUnit == null))
item.EconomicUnit = db.EconomicUnits.Find(vm.EconomicUnitId);
else
if (!vm.EconomicUnitId.HasValue)
item.EconomicUnit = null;
//breakpoint 2 --> (no changes to item, if its the first breakpoint)
item= vm.GetItem(item); //override non relational data
db.Entry(item).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
...
}
方法的GetItem:我有以下控制器动作
public Item GetItem(Item item)
{
item.DateReported = this.DateReported; //Datetime
item.Description = this.Description; //String
item.FirstDeadline = this.FirstDeadline; //Datetime
item.SecondDeadline = this.SecondDeadline; //Datetime
item.ThirdDeadline = this.ThirdDeadline; //Datetime
item.ReplacementDeadline = this.ReplacementDeadline; //Datetime
return item;
}
问题:EF不保存更改item.Building,item.ContractUnit或item.EconomicUnit。但是,当我逐步调试它时,它确实如此。 没有错误或异常抛出,视图模型和模型正确填充。
我真的希望有人能帮助我解决这个...
通过将代码缩减为演示问题所需的最小代码,您可能会更好地找到自己或帮助您的人的答案。理想的是创建一个全新的解决方案。也发布连接字符串,你的EF初始化代码等。 – demoncodemonkey
其实我已经减少了代码对一切影响这种行为。其他一切工作正常,以及连接字符串。我的问题是,除非我正在逐步调试,否则ef不会反映数据库的更改。 – b1ub
GetItem有什么作用?代码如何查找? –