分离实体集合

时间:2014-03-12 01:00:30

标签: c# entity-framework

好吧,我有一个带有集合的模型,可以在循环结构中保存更改

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;
    }
}

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

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

此外,您的代码有任何交易吗?

答案 1 :(得分:0)

试试这个?警告未经测试!

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();

    }

}

答案 2 :(得分:0)

我不知道为什么但是它有效,我在这篇文章中使用它就像它指的那样

EntityCollection Clear() and Remove() methods

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

这几乎就像我在使用&#34;之前所做的那样&#34;

非常感谢大家