2012-09-05 4 views
5

Gibt es eine Möglichkeit, eine Eigenschaft mit defaultValue zu senden, aber mit dem Ergebnis der Datenbankberechnung zu aktualisieren? Es gibt einen Trigger in der Datenbank, der für die Eingabe -1 eine Prozedur auslöst, die einen neuen Wert berechnet. Wie bekomme ich den Wert zurück?Wie kann ich die ID der eingefügten Entität im Entity-Framework abrufen, wenn Sie defaultValue verwenden?

<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="None" DefaultValue="-1" /> 

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
return x.ID //gives -1, but the computed value should be different. 
+0

Ich habe versucht db.Refresh (System.Data.Objects.RefreshMode.StoreWins, x); Aber glücklicherweise durchsucht die Refresh-Methode die Datenbank wahrscheinlich mit der ID, also dem Wert, den ich aktualisieren muss. –

Antwort

-2
using (var context = new MyContext()) 
    { 
     context.MyEntities.AddObject(newObject); 
     context.SaveChanges(); 

     int id = newObject.Id; // Will give u the autoincremented ID 
    } 
+3

Er verwendet nicht das automatische Inkrement, sondern einen Trigger, um einen Wert zu generieren. –

11

Sie müssen die Unternehmen nach savechanges.Because nachladen es durch einen Datenbank-Trigger geändert wurde, die nicht von EF verfolgt werden können. SO müssen wir die Entität erneut aus der DB laden,

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
db.Entry(x).GetDatabaseValues(); 

return x.ID; 
+0

Das sieht gut aus, aber es gibt keinen Eintrag im db-Kontext –

+0

Verwenden Sie zuerst das Modell? –

+1

Ja, ich benutze zuerst das Modell –

Verwandte Themen