Метод SaveChangesAsync () не обновляет базу данных - PullRequest
0 голосов
/ 08 июня 2018

У меня есть веб-приложение с:

  • Entity Framework 6.1.3
  • Framework .NET 4.5.1

Я произвел обновление .NET Framework с версии 4.5.1 до 4.6.2 .

С тех пор "SaveChangesAsync () Метод "System.Data.Entity" больше не обновляет мою базу данных.

Я не могу найти это из-за пакета .NET Framework или из-за проблем совместимости между Entity Framework 6.1.3 и .NETFramwork 4.6.2 для метода "SaveChangesAsync ()" ... Я потерян!

Вот несколько примеров:

Класс обслуживания

public async Task<MyActionResponseModel> UpdateSomething(Catalogue catalogue)
{
    if (catalogue== null) throw new ArgumentNullException("catalogue is null");
    var response = new ActionAddResponse();

    var catalogueToUpdate = await _catalogueRepository.GetCatalogueById(catalogue.Id);
    var myDate = new DateTime();
    if (catalogue.EndDate != null)
    {
        myDate = catalogue.EndDate.Value;
        myDate = myDate.Date.AddHours(23).AddMinutes(59);
    }

    catalogueToUpdate.Year = catalogue.Year;
    catalogueToUpdate.StartDate = catalogue.StartDate;
    catalogueToUpdate.EndDate = catalogue.EndDate!= null ? myDate : catalogue.EndDate;
    catalogueToUpdate.Tax = catalogue.Tax;
    catalogueToUpdate.Online = Convert.ToBoolean(catalogue.Online);
    catalogueToUpdate.RefNote = catalogue.RefNote;

    await _unitOfWork.SaveAsync();

    response.Success = true;
    response.Message = string.Format("Catalogue has been update");

    return response;
}

Класс UnitOfWork

public class UnitOfWork:IUnitOfWork
{    
    public async Task SaveAsync()
    {
        await _context.SaveChangesAsync(); // System.Data.Entity
    }
}

package.config

<packages>
  <package id="EntityFramework" version="6.1.3" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net451" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net451" />
  <package id="Newtonsoft.Json" version="10.0.1" targetFramework="net451" />
</packages>

Я уже проверил свою асинхронную / ожидающую хореографию, и все кажется правильным,Так что же тут происходит?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Я наконец обнаружил, что я делаю не так.На самом деле я использую "Unity" (версия 5.8.6).Я сделал обновление своего пакета Unity одновременно с .NET Framework в прошлый раз.

Я сделал свой UnityConfig.cs следующим образом:

public static void ConfigureUnityContainer(IUnityContainer container)
{
    // some other resgistration
    container.RegisterType<MyEntities>(new PerResolveLifetimeManager());
}

Ошибка относится к типуменеджера.Правильным является PerRequestLifetimeManager:

public static void ConfigureUnityContainer(IUnityContainer container)
{
    // some other resgistration
    container.RegisterType<MyEntities>(new PerRequestLifetimeManager());
}

Что я понял для PerRequestLifetimeManager, так это то, что контейнер будет разрешать один и тот же экземпляр объекта вHTTP-запрос, в то время как PerResolveLifetimeManager помечает тип, чтобы экземпляры повторно использовались в графе нарастающего объекта.

В итоге, с PerRequestLifetimeManager, в разных http-запросах у нас будут разные разрешенные объекты.

...