以下是我的代码的简短摘要 - 它是很久以前编写的,并且有超过50个属性都以这种方式编写,但当我在模型和ViewModel中添加一个新属性时,它拒绝保存变化:
从我的观点来看:
@Html.EditorFor(m => m.PhoneNumber )
从ViewModel我有:
public string Registration {get;set;}
我们有控制器:
public async Task<ActionResult> SaveVehicleInfo(VehicleViewModel VM){
Vehicle vehicle = Mapper.Map<VehicleViewModel, Vehicle>(VM); (Automapper library)
var changes = false;
Vehicle dbVehicle = await context.Vehicles.FindAsync(vehicle.ID)
//A load more properties etc
string PhoneNumberChange = "";
if (dbVehicle.PhoneNumber != vehicle.PhoneNumber)
{
PhoneNumberChange = " - Phone Number changed to " + vehicle.PhoneNumber + " from " + dbVehicle.PhoneNumber;
dbVehicle.PhoneNumber = vehicle.PhoneNumber;
changes = true;
}
//At the end:
_db.Vehicles.Attach(dbVehicle);
_db.Entry(dbVehicle).State = EntityState.Modified;
_db.Notes.Add(note);
try
{
await _db.SaveChangesAsync();
}
catch (Exception e) {
var str = "";
}
return #stuff#;
}
我知道这不是最好的方法,正如我所说的那样是很久以前写的。
在此行中检查项目dbVehicle:
_db.Entry(dbVehicle).State = EntityState.Modified;
它正确地将dbVehicle.PhoneNumber显示为我的新值。它也表明了这一点:
PhoneNumberChange = " - Phone Number changed to NEWVALUE from OLDVALUE"
save语句会通过,但SQL日志不会显示PhoneNumber,甚至包含在UPDATE语句中。所有其他值保存正确,除了我刚刚完成的这个新值。我可以在数据库中手动输入它,savechangesasync方法会触发而不会抛出任何东西,我只是无法弄清楚它为什么会这样做。
已清理/重建整个解决方案。不知道发生了什么。
实体框架第6版。