Wie Fremdschlüsselbeziehungen mit dem Entity Framework zu schaffen?
-
10-07-2019 - |
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?
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();
}