c# ändern Wie kann ich die ID der eingefügten Entität im Entity-Framework abrufen?




wordpress title tag ändern (8)

Ich habe ein Problem mit Entity Framework in Asp.net. Ich möchte den Id-Wert erhalten, wenn ich ein Objekt zur Datenbank hinzufüge. Wie kann ich das machen?


Sie müssen die Entität nach dem Speichern von Änderungen erneut laden. Weil es durch einen Datenbank-Trigger geändert wurde, der nicht von EF verfolgt werden kann. SO müssen wir die Entity erneut aus der DB laden,

db.Entry(MyNewObject).GetDatabaseValues();

Dann

int id = myNewObject.Id;

Sehen Sie sich @jayantha in der folgenden Frage an:

Wie kann ich die ID der eingefügten Entität im Entity-Framework erhalten, wenn Sie defaultValue verwenden?

Suchen Sie @ christian Antwort in der folgenden Frage kann auch helfen:

Entity Framework Aktualisierungskontext?


Ich stoße auf eine Situation, wo ich die Daten in die Datenbank einfügen muss und gleichzeitig die primäre ID unter Verwendung von Entity-Framework benötigen. Lösung:

long id;
IGenericQueryRepository<myentityclass, Entityname> InfoBase = null;
try
 {
    InfoBase = new GenericQueryRepository<myentityclass, Entityname>();
    InfoBase.Add(generalinfo);
    InfoBase.Context.SaveChanges();
    id = entityclassobj.ID;
    return id;
 }

Ich habe die Antwort von Ladislav Mrnka benutzt, um IDs erfolgreich wiederzugewinnen, wenn ich das Entity Framework verwende, aber ich poste hier, weil ich es missbraucht habe (dh wo es nicht gebraucht wurde) und dachte, ich würde meine Ergebnisse hier veröffentlichen. Fall Leute suchen, um das Problem zu lösen, das ich hatte.

Betrachten Sie ein Auftragsobjekt, das eine Fremdschlüsselbeziehung mit dem Kunden hat. Als ich gleichzeitig einen neuen Kunden und einen neuen Auftrag hinzufügte, machte ich so etwas;

var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id

In meinem Fall war dies jedoch nicht erforderlich, da ich eine Fremdschlüsselbeziehung zwischen customer.Id und order.CustomerId hatte

Alles was ich tun musste war dies;

var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer}; 
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order

Jetzt, wenn ich die Änderungen speichere, wird die ID, die für den Kunden generiert wird, ebenfalls zur Bestellung hinzugefügt. Ich brauche die zusätzlichen Schritte nicht

Ich bin mir bewusst, dass dies die ursprüngliche Frage nicht beantwortet, aber dachte, dass es Entwicklern, die EF neu sind, helfen könnte, die Antwort mit der höchsten Wahl für etwas zu verwenden, das möglicherweise nicht benötigt wird.


Sie können ID nur nach dem Speichern erhalten, stattdessen können Sie eine neue Guid erstellen und vor dem Speichern zuweisen.


Es ist ziemlich einfach. Wenn Sie DB-generierte IDENTITY (wie IDENTITY in MS SQL), müssen Sie lediglich Entity zu ObjectSet und SaveChanges zu verwandtem ObjectSet SaveChanges . Id wird automatisch für dich ausgefüllt:

using (var context = new MyContext())
{
  context.MyEntities.AddObject(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

Das Entitäts-Framework folgt standardmäßig jedem INSERT mit SELECT SCOPE_IDENTITY() wenn automatisch generierte SELECT SCOPE_IDENTITY() verwendet werden.


Wenn Sie zuerst EF 6.x-Code verwenden

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

und initialisiert eine Datenbanktabelle, es wird ein gesetzt

(newsequentialid())

innerhalb der Tabelleneigenschaften unter der Überschrift Standardwert oder Bindung, wodurch die ID beim Einfügen eingefügt werden kann.

Das Problem ist, wenn Sie eine Tabelle erstellen und die hinzufügen

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Teil später, zukünftige update-Datenbanken werden nicht die (newsequentialid ()) hinzufügen

Um den richtigen Weg zu finden, wischen Sie die Migration ab, löschen Sie die Datenbank und migrieren Sie erneut ... oder fügen Sie einfach (newsequentialid ()) in den Tabellen-Designer ein.



Repository.addorupdate(entity, entity.id);
Repository.savechanges();
Var id = entity.id;

Das wird funktionieren.







entity