5

我想在我的数据库中在具有几个外键关系的表上创建一个新行,但我无法处理需要进行的顺序和调用。这是我到目前为止所拥有的:

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 合并选项加载的对象始终是分离的。

有任何想法吗?

4

3 回答 3

8

(感谢约翰的语法修复)

所以我想通了。这是你必须做的:

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

我希望这对人们有所帮助。

于 2008-10-13T14:51:45.187 回答
6

为什么不使用实体引用?您的方法将导致额外的SELECT语句。

一个更好的方法是使用CustomerReference类和一个EntityKey.

order.CustomerReference = new System.Data.Objects.DataClasses.EntityReference<Customers>();
order.CustomerReference.EntityKey = new EntityKey("ModelsEntities.Customers", "Id", custId);
于 2008-12-15T16:12:15.390 回答
0

对于更新这里是一些示例代码:

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();
}
于 2009-06-14T14:24:13.637 回答