尽管使用“使用”,实体框架仍然缓存

时间:2019-04-02 10:53:49

标签: c# asp.net entity-framework

我正在尝试使用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);

....

它收到旧记录。

2 个答案:

答案 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();