相关疑难解决方法(0)

如何根据rowversion/timestamp值查询Code First实体?

我遇到过一个案例,其中与LINQ to SQL相当不错的东西似乎对Entity Framework来说非常迟钝(或者可能是不可能的).具体来说,我有一个包含rowversion属性的实体(用于版本控制和并发控制).就像是:

public class Foo
{
  [Key]
  [MaxLength(50)]
  public string FooId { get; set; }

  [Timestamp]
  [ConcurrencyCheck]
  public byte[] Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够将实体作为输入,并找到最近更新的所有其他实体.就像是:

Foo lastFoo = GetSomeFoo();
var recent = MyContext.Foos.Where(f => f.Version > lastFoo.Version);
Run Code Online (Sandbox Code Playgroud)

现在,在数据库中,这将起作用:两个rowversion值可以相互比较而没有任何问题.在使用LINQ to SQL之前我做了类似的事情,它映射了rowversionto System.Data.Linq.Binary,可以进行比较.(至少在表达式树可以映射回数据库的程度上.)

但在Code First中,属性的类型必须是byte[].并且两个数组无法与常规比较运算符进行比较.有没有其他方法来编写LINQ to Entities将理解的数组的比较?或者将数组强制转换为其他类型,以便比较可以通过编译器?

c# sql-server entity-framework rowversion ef-code-first

19
推荐指数
2
解决办法
5960
查看次数