【问题标题】:Insert Master-Detail with LINQ使用 LINQ 插入主从细节
【发布时间】:2013-04-04 05:24:17
【问题描述】:

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

每个销售都有一个 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 或 实体引用。附加到 ObjectContext 的对象不能 被添加到不属于的 EntityCollection 或 EntityReference 与源对象相关联。

我做错了吗?我阅读了有关附加和分离对象的信息,但在我尝试后发现违反了 FK 约束。

你能告诉我我做错了什么吗?或者这是另一种方法吗?我是 LINQ 的新手,我可以用纯 SQL 完美地做到这一点,但我想了解它。

【问题讨论】:

  • 那么“venta”是从哪里来的???
  • 我很抱歉。我的主要语言是西班牙语,所以大部分标识符都是西班牙语。我翻译了它们,但忘记了最后一部分。

标签: c# linq entity-framework


【解决方案1】:

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

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

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

【讨论】:

  • 如果您已保存主条目,但在保存详细信息时出现错误,然后您在标题中有错误的主条目而没有详细信息,该怎么办
猜你喜欢
  • 2016-03-15
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多