freiberuflicher Software Entwickler C#, vb.Net, vba, UWP, WPF, WinForms, SQL Server, Access, Excel, ASP.Net Core MVC Telefon: 07022/9319004   Kontakt
#

 

 

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
»
EF: Neue ID eines Datensatzes ermitteln
»
Asp MVC: Daten vom SQL Server direkt in eine List ausgeben
»
Linq: Daten mit einer Left Join abfragen
»
Asp Linq: Daten mit einer LINQ Datenabfrage vom SQL Server abholen

.

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