1

我想插入一个具有以下结构的主从细节:

每个销售都有一个 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 完美地做到这一点,但我想了解它。

4

1 回答 1

0

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

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

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

于 2013-04-02T23:25:43.970 回答