2016-07-29 15 views

Antwort

1

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.

+0

Diese ist nicht ganz richtig, ich werde eine Antwort in einer Minute hinzufügen ... – DavidG

+0

Wäre toll .. !! –

+0

Hoffentlich hilft das :) – DavidG

1

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();   
} 
Verwandte Themen