这是我的问题:我已经创建了一个通用方法来更新我的上下文中的实体,自动添加一些属性(更新日期,更新用户ID ...)。
(在代码中,这是函数ModificationSet())
我的问题是,当我查找在我的上下文中修改的项目时,我会查找每个实体的状态
public static bool Update<U>(U dContext, int iCurrentUserId)
where U : DbContext
{
using (var tx = dContext.Database.BeginTransaction())
{
try
{
foreach (T tItem in dContext.Set<T>())
{
if (dContext.Entry(tItem).State != EntityState.Modified) continue;
ModificationSet(tItem, iCurrentUserId);
}
dContext.SaveChanges();
tx.Commit();
return true;
}
catch (Exception e)
{
tx.Rollback();
return false;
}
}
}
我的问题:当我在10 000个表中更新一个实体时,它会在10 000个元素上循环。
我想做那样的事情:
foreach (T tItem in dContext.Set<T>().Where(z => dContext.Entry(z).State == EntityState.Modified))
但LinQ对过滤器不合适。
是否有办法在每个实体上都没有循环,只获得具有EntityState Modified的那些?
感谢您提供任何信息,
问候。
答案 0 :(得分:0)
我的一位同事帮助我,找到我认为更好的解决方案:
foreach (T tItem in dContext.ChangeTracker.Entries<T>().Where(z => z.State == EntityState.Modified).Select(z => z.Entity))
感谢他:)