我可以反复使用Entry吗?

时间:2014-03-03 15:45:06

标签: c# asp.net asp.net-mvc entity-framework

asp.net mvc 5,实体框架6.0。我有ADO.NET EDM模型。我需要更新多个实体。如果我多次使用Entry,我会例外:ObjectStateManager已经有一个具有相同键的对象。 我怎么能这样做,使用类似这样的代码:

db.Entry(company.Company).State = EntityState.Modified; //one type object
db.SaveChanges();
db.Entry(company.Preview).State = EntityState.Modified; //another type object
db.SaveChanges();

foreach (CompanyTelephone item in company.Phones) // another type
{
    if (item.Id > 0)
    {
        db.Entry(item).State = EntityState.Modified;
        db.SaveChanges();
    }
    else
    {
        db.CompanyTelephones.Add(item);
    }

}
db.SaveChanges();

1 个答案:

答案 0 :(得分:0)

您可以根据需要随时使用Entry。问题在于设置状态。如果设置状态,item将附加到上下文。显然,前两行中已经附加了一些项目。您只需检查item是否为Detached

if (item.Id > 0 && db.Entry(item).State == EntityState.Detached)
{
    db.Entry(item).State = EntityState.Modified;
    db.SaveChanges();
}
else
{
    db.CompanyTelephones.Add(item);
}

然而,正如安德烈所说,不应该进行多次SaveChanges次呼叫。你打破了交易单位。也许没关系。不过,尤其是循环中的调用会导致很多单独的数据库rondtrips。