实体框架比较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);