it-swarm.com.de

Abrufen der Datensatz-ID in Entity Framework nach dem Einfügen

Ich entwickle eine ASP.net-Anwendung mit Entity Framework. Ich benutze DetailsView, um Daten in die Datenbank einzufügen. Es gibt eine Tabelle als Client und ihr Primärschlüssel ist client_id. client_id Wird automatisch von der Datenbank generiert. Ich muss nach dem Einfügen eines Datensatzes in die Tabelle Client automatisch generiert werden client_id Und ihn für die zukünftige Verwendung einem ausgeblendeten Feld zuweisen.

Ich habe danach gesucht und viele Lösungen gefunden. Aber ich kann sie nicht benutzen, da ich neu bei asp.net bin. Es wurde festgestellt, dass Entity Framework Geschäftsobjekte nach dem Aufruf von SaveChanges() automatisch mit den von der Datenbank generierten Werten auffüllt. Meine Frage ist, wo soll ich das in meiner Teilklasse nennen? Was ist die Veranstaltung ?

Ich verwende DetailsView mit EntityDataSource und binde EntityDataSource direkt mit Entity Model. Daher erstelle ich keine Objekte zum Einfügen von Daten.

21
Bishan

Das ist, wonach ich suche.

in Teilklasse

protected void clientDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e )
{

    int newPrimaryKey = ((Client)e.Entity).ClientId;
    Debug.WriteLine(" Client ID is " + newPrimaryKey);

}

und unter der Zeile in EntityDataSource in aspx Seite hinzugefügt.

OnInserted="clientDataSource_OnInserted"
3
Bishan

Nach dem Aufruf von _dbContext.SaveChanges() wird die Entität automatisch mit ihrem neuen Identitätsfeldwert aktualisiert.

Im folgenden Code wird davon ausgegangen, dass Ihr Entity Framework-Entitätscontainername MyEntities lautet und die Client-Tabelle Ihrer Datenbank mindestens die beiden folgenden Felder enthält:

client_id   int identity
client_name varchar(25)

Ihr Code könnte ungefähr so ​​aussehen:

// Establish DbContext
private readonly MyEntities _dbContext = new MyEntities();

// Create new client table entity and initialize its properties
var clientEntity = new Client { client_name="MyCo" };

// Add it to the ORM's collection of Client entities
_dbContext.Clients.Add(clientEntity);

// Save the new entity to the database
_dbContext.SaveChanges();

// Return the identity field from the existing entity,
//   which was updated when the record was saved to the database
return clientEntity.client_id;
43
STLDev

Nachdem Sie die Entität eingefügt haben, sollte sie aktualisiert werden, damit die dem Primärschlüssel in der Datenbank zugeordnete Eigenschaft den neuen PK-Wert aufweist.

Mögen MyObject.Id gibt Ihnen die neue ID

5
Raab

Danke, ich habe 3 Tage lang gesucht und mit komplizierten Ergebnissen gesucht, aber diese Lösung ist brillant! Hier ist es in vb.net:

Protected Sub dvArticulos_ItemInserted(sender As Object, e As EntityDataSourceChangedEventArgs) Handles EntityDataSource1.Inserted
    Dim last_Serie As Long = DirectCast(e.Entity, articulos).Serie
    Session("Articulo") = last_Serie
End Sub
0
RADU