EF6 - 更新 - 在上下文

时间:2017-03-22 18:06:09

标签: entity-framework-6 updates dbcontext

这是我的问题:我已经创建了一个通用方法来更新我的上下文中的实体,自动添加一些属性(更新日期,更新用户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的那些?

感谢您提供任何信息,

问候。

1 个答案:

答案 0 :(得分:0)

我的一位同事帮助我,找到我认为更好的解决方案:

foreach (T tItem in dContext.ChangeTracker.Entries<T>().Where(z => z.State == EntityState.Modified).Select(z => z.Entity))

感谢他:)