Frage

Ich mag eine neue Zeile in der Datenbank auf einer Tabelle erstellen, die ein paar Fremdschlüsselbeziehungen haben, und ich habe nicht einen Griff bekommen auf welcher Reihenfolge und was fordert Notwendigkeit gemacht werden kann. Das ist, was ich habe, so weit:

db.Models.Order order = DB.Models.Order.CreateOrder( apple );
order.CustomerReference.Attach( ( from c in db.Customer where c.Id == custId select c ).First() );
db.SaveChanges();

Der Code auf der zweiten Linie versagt es, zu sagen:

  

Anhänge ist kein gültiger Vorgang, wenn   das Quellobjekt damit verbundenen   bezogen Ende ist in einem hinzugefügt, gelöscht,   oder abgenommenen Zustand. Objekte geladen   mit der NoTracking Einarbeitungsoption werden   immer abgelöst.

Irgendwelche Ideen?

War es hilfreich?

Lösung

(Danke John für die Grammatik-Fixes)

Also habe ich es aus. Dies ist, was Sie zu tun haben:

db.Models.Order order = DB.Models.Order.CreateOrder( apple );
order.Customer = (from c in db.Customer where c.Id == custId select c).First();
db.SaveChanges();

Ich hoffe, das hilft Menschen.

Andere Tipps

Warum nicht Entitätsverweise verwenden? Ihre Methode wird eine zusätzliche SELECT Aussage führen.

Eine viel schönere Art und Weise ist die CustomerReference Klasse und einen EntityKey zu verwenden.

order.CustomerReference = new System.Data.Objects.DataClasses.EntityReference<Customers>();
order.CustomerReference.EntityKey = new EntityKey("ModelsEntities.Customers", "Id", custId);

Für Update hier ist ein Beispielcode:

using (var ctx = new DataModelEntities())
{

       var result = (from p in ctx.UserRole.Where(o => o.UserRoleId == userRole.UserRoleId)
                              select p).First();

       result.RolesReference.EntityKey = new EntityKey("DataModelEntities.Roles",
                                       "RoleId", userRole.RoleId);

       result.UserRoleDescription = userRole.UserRoleDescription;      
       ctx.SaveChanges();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top