Dies scheint eindeutig ein anderes Problem als die Multithreading issue zu sein.Wenn Sie Unity DI verwenden, um Non DI Service mit Entity Framework hinzuzufügen
Verwenden von Unity mit Dependency Injection (DI) für alle meine Dienste und Verwenden eines Entitätsrahmenkontextes, der scheinbar initialisiert wird und ordnungsgemäß funktioniert.
Momentan verwenden Sie .net 4.5 mit mvc und Unity.WebApi und Entity Framework 6.0.0.0.
Ich möchte wissen, ob es möglich ist, einen Dienst in diesem Modell beizubehalten oder außerhalb von DI zu verwenden und in der Lage zu sein, das Entitätsframework im persistenten Dienst zu schließen und erneut zu initialisieren, wenn möglich.
Derzeit bekomme ich diesen Fehler, wenn ich versuche, einen Dienst durch eine Stack-Klasse zu persistieren, so dass seine Leistung sehr schnell sein wird b/c verwende ich häufiger.
The Error message I am getting is: Error Message: The underlying provider failed on Open. - The connection was not closed. The connection's current state is connecting.( at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
Zweck ist nur eine einzige Einheit abrufen und sehr schnell im Vergleich zu der Abhängigkeit injizierte Version machen laden und die Ergebnisse durch einen Service aus. Die Entität ist für Protokollierungszwecke an eine SQL-Tabelle gebunden. Hier
ist Code-Schnipsel, warum ich versuche zu beharren Dienst zu tun:
using System;
using System.Linq;
using Davinci.Models;
namespace Services.Services
{
public interface ILogService
{
void SaveLog(UserLog log);
UserLog RetreiveLog(DateTime dateTime);
}
public class LogService : ILogService
{
private DavinciEntities _DavinciEntities;
public LogService(DavinciEntities context)
{
_DavinciEntities = context;
}
private void SaveLog(UserLog log)
{
_DavinciEntities.UserLogs.Add(log);
_DavinciEntities.SaveChanges();
}
public UserLog RetreiveLog(DateTime dateTime)
{
return _DavinciEntities.UserLogs.Where(m => m.LogTime.ToShortDateString() == dateTime.ToShortDateString()).FirstOrDefault();
}
}
public static class PersistService
{
public static UserLogService userLogService {get; set;}
public static void PersistUserLog(UserLogService service)
{
IUserLogService UserLogService;
if (UserAccessLog == null)
{
UserLogService = (UserLogService)context.Configuration.DependencyResolver.GetService(typeof(UserLogService));
}
}
}
}
Können Sie einige Code-Snippets posten? – ovation22
Mögliches Duplikat von [Multithreading Entity Framework: Die Verbindung wurde nicht geschlossen. Der aktuelle Status der Verbindung wird hergestellt] (https://stackoverflow.com/questions/12521695/multithreading-entity-framework-the-connection-was-not-closed-the-connections) – CodeCaster
Zeigen Sie den _minimal_-Code an, der zur Reproduktion des Problems erforderlich ist , wie in [mcve] erklärt. Teilen Sie auch Ihre Forschung wie in [fragen] erläutert. Dieser Fehler hängt mit der Wiederverwendung einer alten DbContext-Instanz zusammen, deren Verbindung geschlossen wurde, indem sie nicht ordnungsgemäß entsorgt wird und/oder eine falsche Lebensdauer in Ihrem DI-Container angegeben wird. Zeigen Sie, wie Sie diese Klassen konfigurieren und verwenden. – CodeCaster