使用LINQ插入Master-Detail

时间:2013-04-02 23:12:48

标签: c# linq entity-framework

我想插入具有以下结构的主 - 细节:

每次销售都有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中完美地完成它,但我想了解它。

1 个答案:

答案 0 :(得分:0)

detail.Product仍然与db相关联。价格和件数也可能与之相关联。系统非常严格,确保每个对象只能与一个对象上下文(您的数据库)相关联或完全分离(您的EntityCollection&lt;&gt;)。

您的详细信息EntityCollection需要与db关联(不知道如何执行此操作),或者您的所有对象在被添加到详细信息之前必须正确分离。

老实说,我只是重新排序 - 首先创建Sale并添加它,然后开始将东西插入Sale.SalesDetail。