Ich habe eine Webanwendung mit:
Ich habe ein Upgrade von .NET Framework von Version 4.5.1 auf 4.6.2 durchgeführt .
Seitdem aktualisiert die "SaveChangesAsync ()" Methode der "System.Data.Entity" -Methode meine Datenbank nicht mehr.
Ich kann nicht finden, ob es wegen des .NET Rahmenpakets oder einiger Kompatibilitätsprobleme zwischen Entity Framework 6.1.3 und .NET Framwork 4.6.2 für "SaveChangesAsync ()" Methode ist ... Ich bin verloren!
Hier einige Beispiele:
Serviceklasse
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-Klasse
public class UnitOfWork:IUnitOfWork
{
public async Task SaveAsync()
{
await _context.SaveChangesAsync(); // System.Data.Entity
}
}
Paket.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>
Ich habe bereits meine Async / Choreographie überprüft und alles scheint korrekt zu sein. Was passiert gerade dort?
Vielen Dank im Voraus.
Ich habe endlich gefunden, was ich falsch gemacht habe. Tatsächlich verwende ich "Unity" (Version 5.8.6). Ich habe das Unity-Paket zur gleichen Zeit aktualisiert wie das .NET-Framework.
Ich habe meine UnityConfig.cs wie folgt gemacht:
public static void ConfigureUnityContainer(IUnityContainer container)
{
// some other resgistration
container.RegisterType<MyEntities>(new PerResolveLifetimeManager());
}
Der Fehler bezieht sich auf den Typ des Managers. Die richtige ist PerRequestLifetimeManager
:
public static void ConfigureUnityContainer(IUnityContainer container)
{
// some other resgistration
container.RegisterType<MyEntities>(new PerRequestLifetimeManager());
}
Was ich für PerRequestLifetimeManager
verstanden PerRequestLifetimeManager
ist, dass der Container die gleiche Instanz des Objekts in der http-Anfrage PerResolveLifetimeManager
während PerResolveLifetimeManager
den Typ so kennzeichnet, dass Instanzen im gesamten Aufbau-Objekt-Graphen wiederverwendet werden.
Zusammenfassend haben wir mit PerRequestLifetimeManager
in verschiedenen HTTP-Anfragen unterschiedliche aufgelöste Objekte.