在实体框架Rowversion比较(Rowversion comparison in Entity

2019-08-01 03:10发布

我应该如何比较rowversion使用实体框架领域? 我有有一个表rowversion列,我想从哪一行版本比规定值较高的表中获取数据。

//code
byte[] rowversion = .....somevalue;

 _context.Set<T>().Where(item => item.RowVersion > rowVersion);

这条线是不行的,它抛出错误:

不能适用于类型的操作数“字节[]”和“字节[]”

任何想法,我怎么可以比较rowversion在C#/ EF领域?

Answer 1:

这是我们做的,以解决这个问题:

使用比较扩展这样的:

public static class EntityFrameworkHelper
    {
        public static int Compare(this byte[] b1, byte[] b2)
        {
            throw new Exception("This method can only be used in EF LINQ Context");
        }
    }

然后,你可以做

byte[] rowversion = .....somevalue;
_context.Set<T>().Where(item => item.RowVersion.Compare(rowversion) > 0);

该工程没有一个C#实现的原因是因为比较的扩展方法实际上从来不叫,和EF LINQ简化x.compare(y) > 0x > y



Answer 2:

你肯定是犹太使用RowVersion的? 当翻转会发生什么?

我认为你需要将它转换为字符串或第一诠释。 例如

Encoding.Unicode.GetString(ba)

您也可以从EF调用的SP。 :-)



Answer 3:

使用EntitySQL。

// Drop down to ObjectContext and query against ObjectSet:
var objectContext = (dbContext as IObjectContextAdapter).ObjectContext;
// Create param for EntitySQL
var param = new ObjectParameter("rowVersion", rowVersion);
// Create IQueryable<T>
var query = objectContext.CreateObjectSet<T>.Where("it.RowVersion > @rowVersion",param);


文章来源: Rowversion comparison in Entity Framework