Как создать отношения внешнего ключа с Entity Framework? - PullRequest
5 голосов
/ 13 октября 2008

Я хочу создать новую строку в моей базе данных на таблице, имеющей пару отношений между внешними ключами, и я не смог понять, какой порядок и какие вызовы необходимо выполнить. Это то, что я до сих пор:

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();

Во второй строке код не работает, говоря:

Присоединение не является допустимой операцией, когда исходный объект, связанный с этим связанный конец добавлен, удален, или отдельное состояние. Загруженные объекты с помощью опции слияния NoTracking являются всегда отстранен.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 13 октября 2008

(спасибо Джону за исправления грамматики)

Так что я понял это. Вот что вам нужно сделать:

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();

Я надеюсь, что это помогает людям.

6 голосов
/ 15 декабря 2008

Почему бы не использовать ссылки на сущности? Ваш метод вызовет дополнительный оператор SELECT.

Намного приятнее использовать класс CustomerReference и EntityKey.

order.CustomerReference = new System.Data.Objects.DataClasses.EntityReference<Customers>();
order.CustomerReference.EntityKey = new EntityKey("ModelsEntities.Customers", "Id", custId);
0 голосов
/ 14 июня 2009

Для обновления вот пример кода:

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();
}
...