实体框架中的行版本比较


如何使用

实体框架比较rowversion字段?我有一个具有rowversion列的表,我想从行版本高于指定值的表中获取数据。

byte[] rowversion = ... some value;
 _context.Set<T>().Where(item => item.RowVersion > rowVersion);

此行不起作用,它会抛出错误:

运算符">"不能应用于"byte[]"和"byte[]"类型的操作数

知道如何比较 C#/实体框架中的rowversion字段吗?

以下是我们解决这个问题的方法。使用如下所示的比较扩展:

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# 实现的情况下工作的原因是,从未实际调用过Compare扩展方法,并且 EF LINQ 将x.Compare(y) > 0简化为x > y

你确定这是犹太洁食对 RowVersion 的使用吗?当它翻车时会发生什么?

我认为您需要先将其转换为字符串或 int。

例如
Encoding.Unicode.GetString(ba)

还可以从 EF 调用 SP。

使用 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);

最新更新