[英]Adding new row with referenced types in Entity Framework
我只用Entity Framework几个星期。 很好,但是我应该如何正确地添加带有引用的子项(表)的新行?
我尝试了这个程序
CMS.ShopOrder order = new CMS.ShopOrder();
order.CreatedOn = DateTime.Now;
foreach (var item in CMS.CurrentSession.Cart.Items)
{
order.ShopOrderItems.Add(item);
}
db.AddToShopOrder(order);
int selT = FormatHelper.GetInt32(ddTransport.SelectedValue);
int selP = FormatHelper.GetInt32(ddTransport.SelectedValue);
order.Transportation = db.Transportation.Where(t => t.Id == selT).FirstOrDefault();
order.Payment = db.Payment.Where(p => p.Id == selP).FirstOrDefault();
order.Customer = db.Customer.Where(c=>c.Id == CMS.CurrentSession.Customer.Id).FirstOrDefault();
db.SaveChanges();
但我得到了错误:
IEntityChangeTracker的多个实例不能引用一个实体对象。 第492行:base.AddObject(“ ShopOrder”,shopOrder);
我可以一次添加所有这些记录吗?
非常感谢。
似乎您的对象上下文处理有问题。 该错误表明您尝试添加实体时该实体已经与对象上下文相关联。 我假设您在执行多个Web请求时保持活动状态,但是为每个Web请求创建一个新的对象上下文。 您必须将实体与旧的上下文分离,并将它们附加到新的实体上,以使此工作正常。
有关类似问题,请参见MSDN 。
谢谢danbruc,
问题是,当我将其添加到会话时,我没有从objectContext中分离对象。
这有效:
public CMS.ProductVariant GetProductVariantById(int id)
{
ProductVariant pv = null;
if (id > 0)
{
using (db = new CmsEntity())
{
pv = db.ProductVariant.Where(v => v.Id == id).FirstOrDefault();
db.Detach(pv);
}
}
return pv;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.