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();
答案 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。