如何与Entity Framework创建外键关系?

时间:2008-10-13 14:23:10

标签: asp.net-mvc entity-framework foreign-key-relationship

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

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 个答案:

答案 0 :(得分:8)

(感谢John提供语法修正)

所以我明白了。这就是你要做的事情:

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

我希望能帮助别人。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分: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();
}