c#实体模型不能正确保存更改到SQL数据库
本文关键字:SQL 数据库 保存更改 实体模型 不能 | 更新日期: 2023-09-27 18:02:49
这是我的代码的简要总结-它是很久以前写的,有超过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
我想也许这是在实体框架的某个地方出了问题。在大量的混乱之后,删除模型并重新添加它似乎解决了这个问题。