Entity Framework все еще кеширует, хотя использует "Using" - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь использовать Entity Framework для работы с базой данных, я использую метод расширения и передаю контекст сущности в логические коды. База данных успешно обновляется, но когда я перезваниваю, результат, я все еще старый Records, я думаю, что проблема на Cache of Entities, но не ясно, я не смог найти ничего плохого в моем коде. Пожалуйста, помогите:

Метод расширения:

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 голосов
/ 02 апреля 2019

Ваша проблема не в кешировании.Вы используете метод 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();
0 голосов
/ 02 апреля 2019

Entity Framework кэширует объекты внутри экземпляра DbContext. Смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...