我想插入具有以下结构的主 - 细节:
每次销售都有Id,日期和客户,员工和销售详细信息。 每个销售明细都有件号和价格,当然还有对其主人和哪个产品的参考。
我尝试了以下代码,但我无法让它工作:
private void GenerarNota()
{
EntityCollection<SalesDetail> details = new EntityCollection<SalesDetail>();
foreach (ListItem item in _productList)
{
SalesDetail detail = new SalesDetail();
detail.Product = db.Product.FirstOrDefault(p => p.Id == item.Id);
detail.Pieces = item.Pieces;
detail.Price = item.Price;
details.Add(detail);
}
Sale sale = new Sale
{
Client = (Client )txtCliente.Item,
Employee = (Employee )txtEmp.Item,
SalesDetail = details
};
db.AddToSale(sale);
db.SaveChanges();
}
我得到的例外:
无法将对象添加到EntityCollection或 的EntityReference。附加到ObjectContext的对象不能 被添加到不是的EntityCollection或EntityReference 与源对象相关联。
我做错了吗?我读过有关附加和取消对象的内容,但在我尝试之后,我遇到了FK约束违规。
你能告诉我我做错了什么,或者这是另一种方式吗?我是LINQ的新手,我可以在纯SQL中完美地完成它,但我想了解它。
答案 0 :(得分:0)
detail.Product仍然与db相关联。价格和件数也可能与之相关联。系统非常严格,确保每个对象只能与一个对象上下文(您的数据库)相关联或完全分离(您的EntityCollection&lt;&gt;)。
您的详细信息EntityCollection需要与db关联(不知道如何执行此操作),或者您的所有对象在被添加到详细信息之前必须正确分离。
老实说,我只是重新排序 - 首先创建Sale并添加它,然后开始将东西插入Sale.SalesDetail。