【问题标题】:Detach Entity Collection分离实体集合
【发布时间】:2014-03-13 02:22:19
【问题描述】:

好吧,我有一个模型,其中包含一个在循环结构中保存更改的集合

foreach(Customer objCustomer in listCustomer)
{
    try
    {
        db.Customer.Add(objCustomer);
        db.SaveChanges();
    }
    catch(Exception ex)
    {
        db.Entry(objCustomer).State = EntityState.Detach;
    }
}

当它在与实体相关的集合中抛出任何异常时,下一个会继续抛出异常。

我试图分离整个集合,但没有成功

foreach(Customer objCustomer in listCustomer)
{
    try
    {
        db.Customer.Add(objCustomer);
        db.SaveChanges();
    }
    catch(Exception ex)
    {
        for (int i = 0; i < objCustomer.Address; i++)
        {
            db.Entry(objCustomer.Address[i]).State = EntityState.Detach;
        }
        db.Entry(objCustomer).State = EntityState.Detach;
    }
}

有什么建议吗?

【问题讨论】:

  • 1.如果“添加”操作失败,我认为您不能“分离”实体。 2. 我猜您实际上是在尝试更新现有客户,但错误地将其添加到数据库中?
  • 实际上我正在尝试添加,如果不存在,如果存在则更新
  • 你遇到了什么异常?!
  • 集合地址中的 DbValidation 异常,在第一次之后它不断为所有实体抛出相同的异常

标签: c# entity-framework


【解决方案1】:

我不知道为什么,但它有效,我像这篇文章中提到的那样使用了

EntityCollection Clear() and Remove() methods

objCustomer.Address.ToList().ForEach(x => db.Entry(x).State = EntityState.Detached);

这几乎和我使用“for”之前所做的一样

谢谢大家

【讨论】:

    【解决方案2】:

    我认为第二个代码的异常可能从未发生过?

    另外,你的代码有交易吗?

    【讨论】:

    • 我想当我使用 using (Context db = new Context){}
    【解决方案3】:

    试试这个?警告未测试!

    using(var db = new Context())
    {
    
        foreach(Customer objCustomer in listCustomer)
        {
             var exists = db.Customer.FirstOrDefault(x => x.CustomerID == objCustomer.CustomerID;
    
             if( exists = null)
             {
                db.Customer.Add(objCustomer);
    
             }
             else
             {
                db.Entry(objCustomer).State = EntityState.Modified;
             }
             db.SaveChanges();
    
        }
    
    }
    

    【讨论】:

    • 它不起作用“ObjectStateManager 无法使用相同的键跟踪多个对象”
    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2011-10-08
    相关资源
    最近更新 更多