我想在我的数据库中创建一个具有几个外键关系的表的新行,但我无法处理需要进行的订单和调用。这就是我到目前为止所做的:
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合并选项是 总是分开的。
有什么想法吗?
答案 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();
}