我遇到过一个案例,其中与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之前我做了类似的事情,它映射了rowversion
to System.Data.Linq.Binary
,可以进行比较.(至少在表达式树可以映射回数据库的程度上.)
但在Code First中,属性的类型必须是byte[]
.并且两个数组无法与常规比较运算符进行比较.有没有其他方法来编写LINQ to Entities将理解的数组的比较?或者将数组强制转换为其他类型,以便比较可以通过编译器?