我正在尝试使用Entity Framework来处理数据库,我使用扩展方法并将Entity Context传递到逻辑代码中,数据库已成功更新,但是当我回叫时,结果仍然是旧的Records,我猜是那个问题关于实体的缓存,但是还不清楚,我在代码中找不到任何错误。请帮助:
扩展方法:
public static bool UpdateTruck(this Truck Truck, Truck updateInfo, Entities entities)
{
var isSuccess = true;
try
{
// Find Enity Object
var ObjectModel = entities.Truck.Where(x => x.Code == Truck.Code && x.CodePlant == Truck.CodePlant).FirstOrDefault();
// Mapping Modified Properties
ObjectModel = Mapper.Map(updateInfo, ObjectModel);
// Create Database Entity Transaction
entities.Truck.AddOrUpdate(ObjectModel);
//Save Changes
entities.SaveChanges();
}
catch (Exception exception)
{
Debug.WriteLine("[Application Exception:] " + exception.Message);
isSuccess = false;
}
return isSuccess;
}
if (truckInfo.FindTruck(entities).UpdateTruck(truckInfo,entities))
在那之后,我检查了数据库,我重视更新成功的更新,但是当我打电话时:
using (Entities entities = new Entities())
{
PageModel.Truck= Truck.FindTruck(entities);
....
它收到旧记录。
答案 0 :(得分:0)
Entity Framework在DbContext
实例中内部缓存对象。
看here
答案 1 :(得分:0)
您的问题不是缓存。您正在使用AddOrUpdate方法,该方法仅设计用于在使用种子数据初始化数据库时使用。
使用:
entities.Truck.Attach(Truck); // if it already exists.
// since you are loading it again for some reason
var ObjectModel = entities.Truck.Where(x => x.Code == Truck.Code && x.CodePlant == Truck.CodePlant).FirstOrDefault();
// Mapping Modified Properties
ObjectModel = Mapper.Map(updateInfo, ObjectModel); // this looks dubious
// You've just loaded it from the context so it's tracked, so you could just save it
entities.SaveChanges();