Erstellt Entity Framework beim Erstellen einer neuen Instanz von DbContext
eine neue Verbindung zur Datenbank?Entity Framework 5 DbContext und Verbindungen
Antwort
Stimmen Sie mit der DavidG überein, No es ist keine Verbindung an diesem Punkt erstellt.
Anschluss werden beibehalten, nur wenn Savechanges() genannt wird
alle an Ihrem entities
Änderungen, sei es updates, inserts or deletes
, werden nur in der Datenbank beibehalten, wenn die DbContext.SaveChanges()
Methode aufgerufen wird. Wenn eine DbContext
Instanz verworfen wird, bevor die Methode aufgerufen wurde, wird keiner der inserts, updates or deletes
, die über diese DbContext
ausgeführt wurden, im Datenspeicher beibehalten.
nehmen also diesen Code als Beispiel:
var context = new MyContext();
var cars = context.Cars.Where(c => c.TopSpeed > 100);
var carList = cars.ToList(); //Connection will probably happen here
Wo ist eine Verbindung initiiert? Es gibt tatsächlich 2 Möglichkeiten. In der Regel wird immer nur eine Verbindung in der letzten Zeile erstellt. Das Instanziieren eines Kontexts hat keine Nebenwirkungen, und die mittlere Zeile verwendet eine verzögerte Ausführung, sodass noch keine Verbindung erforderlich ist.
Sie können jedoch feststellen, dass in der zweiten Zeile eine Verbindung erstellt wird. Dies passiert, wenn Ihre App zum ersten Mal hochfährt und Entity Framework ausgeführt werden muss und bestätigt, dass Ihre Datenbank dem entspricht, was sie erwartet Sein. Sie können dies deaktivieren, indem Sie den Initialisierer deaktivieren, z. B .:
Database.SetInitializer<MyContext>(null);
Wie wäre es mit dem Schreiben in die Datenbank? Nun, Sie haben etwas Ähnliches passiert, aber diesmal das einzige Mal, wenn eine Verbindung benötigt wird, ist, wenn Sie anrufen SaveChanges
:
var context = new MyContext();
var ferarri = new Car { Name = "Ferarri", TopSpeed = 170 };
context.Cars.Add(ferarri);
context.SaveChanges(); //Connection will probably happen here
Ist das alles? Also nein, werden Sie auch eine neue Verbindung, wenn Sie eine Transaktion starten:
//Database connection will be opened here
using (var transaction = context.Database.BeginTransaction())
{
var cars = context.Cars.Where(c => c.TopSpeed > 100);
var carList = cars.ToList();
}
Dies kann hilft .. [DbContext] (http://mehdi.me/ambient-dbcontext-in-ef6/) –