Net Framework, Office 365, C#, WPF, ASP.Net, Visual Studio, Programmiersprachen PC, C# Programmieren, vba, SQL Server, free source code snippets Antivirus free
#

 

 

Frage:

Wie bekommt man die neue ID eines Datensatzes, den man mit EF Entity Framework an eine Tabelle im SQL Server anfügt

 

Lösung:

Man erstellt einen leeren Datensatz vom passenden MVC Datenmodel, füllt diesen mit neuen Werten und Standardwerten.

Dann fügt man diesen an die EF.Tabelle an

Und aktualisiert dann das EF dbContext.

Danach hat der Datensatz automatisch die neue ID zugeordnet.

NoteModel note= new NoteModel();

note.DtCreated = DateTime.Now;

await _dbContext.tbl_Notes.AddAsync(note); //IDNote: 0->-99999

await _dbContext.SaveChangesAsync();       //IDNote: -99999->16

 

newID = note.IDNote;

 

Erläuterung:

Zum Zeitpunkt des Erstellens neuen Datensatzes ist die beinhaltete ID immer 0.

NoteModel note= new NoteModel();

//ID==0

 

Sobald man den Daten

Man den Datensatz an Entity Framework dbContext anfügt, wird der Datensatz intern auf eine temporäre ID gesetzt.

await _dbContext.tbl_Notes.AddAsync(note); //IDNote: 0->-99999

 

Mit dem Aktualisieren von EF zum SQL Server wird dann aus der temporären Nummer eine echte ID, welche vom SQL Server bei inkrementeller Identity automatisch hochgezählt wird.

await _dbContext.SaveChangesAsync();       //IDNote: -99999->16

 

Da der Datensatz immer noch lokal im Speicher ist, kann man diesen direkt aus dem Datensatz lesen und verarbeiten

newID = note.IDNote;

 

 

Im Debugger

Datensatz wird zu EF Tabelle zugefügt.

Vor dem Anfügen ist die ID =0

 

Nach dbContext.tbl.Add(recordset)

Nach dem Anfügen an die EF dbContext Tabelle ist die ID eine negative Zahl vom Typ long

 

Nach dem durchführen von dbContext.SaveChanges() wird die ID zur richtigen ID des SQL Servers

 

 

Komplettes c# Code-Beispiel

Asp.Net Core 2 MVC

NoteModel note;

if (IDNote==0)

{

    note = _dbContext.tbl_Notes.SingleOrDefault(n => n.IDUser == IDCurrent_User && n.IsDraft==true);

    if (note == null)

    {

        note = new NoteModel();

        note.IsDraft = true;

        note.DtCreated = DateTime.Now;

        note.IDUser = IDCurrent_User;

        note.Title = "#images";

        note.sumImages = 0;

        note.DtEdit = DateTime.Now;

 

        //< save >

        await _dbContext.tbl_Notes.AddAsync(note); //IDNote: 0->-99999

        await _dbContext.SaveChangesAsync();       //IDNote: -99999->16

        //</ save >

 

        //< new ID >

        IDNote = note.IDNote;

        //Console.WriteLine("new IDNote=" + note.IDNote);

        //</ new ID >

    }

    else

    {

        //< last draft >

        IDNote = note.IDNote;

        //</ last draft >

    }

}

 

Mobile
»
FirstOrDefaultAsync ist nicht verfügbar
»
Linq: Ausgabe in eine variable Liste
»
Linq: Felder auswählen in Query
»
The type or namespace name dbAppData_Context does not exist in the namespace
»
Datensatz löschen in Linq
»
Code-Snippet: Linq Select Tabelle aus ID Zahlenfeldern erstellen
»
Linq: LINQ to Entities does not recognize the method System.DateTime AddDays(Double) method
»
Aufbau von Tabellenbeziehungen Datenmodell in Asp.Net Core MVC
»
EF Linq Fehlermeldung: Source sequence contains more than one element.
»
EF: Neue ID eines Datensatzes ermitteln

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Raimund.Popp@Microsoft-Programmierer.de