2017-09-18 4 views
0

Ich versuche, eine einzelne Instanz eines Modells in meinem Db mit Entity Core zu erstellen. Die Art, wie ich es will, ist, wenn der Eintrag im Db nicht existiert, als einen zu machen. Anstatt eine Getter-Methode zu schreiben, um die Arbeit zu erledigen, ist es möglich, Entity Core mir einen leeren Eintrag zu erstellen, mit dem ich arbeite und das zurückspeichern?Eintrag erstellen, wenn einer nicht existiert

Ich versuchte mit FirstOrDefault vergebens. Hier

ist ein Beispielcode:

using (var context = new SearchTermInformationContext()) 
{ 
    // this very first line should return me the single instance or create one if it doesnt exist. 
    var searchTermInfo = context.SearchTermInformation.FirstOrDefault(); 
    searchTermInfo.num_search_terms += numSearchTerms; 
    searchTermInfo.offset = offset; 
    searchTermInfo.last_updated += (DateTime.UtcNow.Ticks/TimeSpan.TicksPerMillisecond).ToString(); 
    await context.SaveChangesAsync(ct); 
} 
+2

Mögliches Duplikat von [Entity Framework Add, wenn nicht ohne Update vorhanden] (https://stackoverflow.com/questions/31162576/entity-framework-add-if-not-exist-without-update) –

+0

Wichtig zu erwähnen, dass Sogar das beigefügte Beispiel bringt einen Erfolg. –

Antwort

1

FirstOrDefault() ergreift das erste Element eines IEnumerable, und, wenn die Sequenz leer ist, gibt sie den Standardwert für diese Art. Da eine Entität immer eine class ist, ist der Standard "Wert" für jede Klasse null. Es gibt meines Wissens keine Möglichkeit, dieses Verhalten zu ändern. Wenn Sie dieses Verhalten möchten, müssen Sie es selbst implementieren, indem Sie eine new Instanz Ihres Typs erstellen, die Felder ausfüllen und eine Einfügung über Ihren Kontext durchführen. Wenn Sie sich etwas einfallen lassen möchten, können Sie möglicherweise eine Erweiterungsmethode unter DbSet<T> erstellen, um eine leere Instanz hinzuzufügen und die angehängte Entität zurückzugeben, ohne die Änderungen zu speichern.

+0

Ok, das macht viel Sinn. Vielen Dank – visc

Verwandte Themen