DbContext nicht Anschluss halten öffnen für re-use
Ich versuche ein vorhandenes Datenbank-Verbindung, so dass ich tun kann, mehrere Datenbank-Operationen unter Verwendung eines TransactionScope
ohne Berufung auf MSDTC.
Entity Framework (mit der neuen DbContext
- API in der Version 4.1) scheint nicht zu wollen, halten Sie ein explizit geöffnet Verbindung geöffnet. Die alten ObjectContext
API hält die Verbindung offen wie erwartet und dokumentiert.
Da die DbContext
API einfach verwendet ObjectContext
unter der Haube, ich hätte erwartet das gleiche Verhalten. Weiß jemand, ob diese änderung beabsichtigt ist oder ein bekanntes Problem? Ich finde, es ist nicht dokumentiert irgendwo.
public void ConnectionRemainsOpen()
{
using (var context = new TestDataContext())
{
try
{
Assert.AreEqual(ConnectionState.Closed, context.Database.Connection.State);
context.Database.Connection.Open();
var firstRecord = context.Table3.FirstOrDefault();
//this Assert fails as State == ConnectionState.Closed
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
var newRecord = new Table3
{
Name = "test",
CreatedTime = DateTime.UtcNow,
ModifiedTime = DateTime.UtcNow
};
context.Table3.Add(newRecord);
context.SaveChanges();
//this Assert would also fail
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
}
finally
{
if (context.Database.Connection.State == ConnectionState.Open)
context.Database.Connection.Close();
}
}
}
Wenn Sie eine Assert-nach Open (), aber vor der ersten Abfrage, was ergibt sich dann? Ich Frage mich, ob das problem hier ist eigentlich nur, dass es zurückkehrte, ein falscher Wert, dann lieber tatsächlich dem schließen und erneuten öffnen von verbindungen.
die Behaupten Sie vorschlagen, geht mit einem erwarteten Ergebnis von
Ich weiß, dies ist eine alte post, aber ich war gerade das Lesen Julia Lerman Buch und die syntax, die Sie nutzt, ist Kontext.- Verbindung.Open() (d.h. keine Datenbank zwischen context und Connection). Nur so ein Gedanke.
die Behaupten Sie vorschlagen, geht mit einem erwarteten Ergebnis von
Open
.Ich weiß, dies ist eine alte post, aber ich war gerade das Lesen Julia Lerman Buch und die syntax, die Sie nutzt, ist Kontext.- Verbindung.Open() (d.h. keine Datenbank zwischen context und Connection). Nur so ein Gedanke.
InformationsquelleAutor GWB | 2011-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Steuern möchten, die Verbindung, die Sie erstellen müssen, bevor Sie zu Rahmen und an Kontext, da sonst die Verbindung nicht unter Ihrer Kontrolle ist. Probieren Sie etwas wie:
Ich denke, es wird dokumentiert, weil der zweite parameter des Konstruktors gibt an, ob Kontext besitzt die Verbindung.
Ich habe versucht, Ihre Lösung, aber das gleiche Ergebnis erhalten. Der Kontext, noch ändert sich der Zustand der Verbindung, wie es ihm gefällt.
Erstellen Sie die Verbindung so: using (var connection = new EntityConnection("name= "MyContainer")) - getestet habe ich durch die Schaffung von 2 nachfolgenden DbContexts und übergeben die Verbindung und nur 1 Verbindung ist, die je geschaffen wurden, als erwartet.
Das funktioniert nur, wenn Sie die Zuordnung definiert im EDMX, oder etwa nicht? Ich habe gerade getestet mich spielt mit der Verbindung, und an diesem Punkt denke ich es ist ein bug, weil es wirklich nicht so verhält, wie es sein sollte.
InformationsquelleAutor Ladislav Mrnka