Как запрашивать объекты Code First на основе значения rowversion / timestamp?

Я столкнулся со случаем, когда что-то, что достаточно хорошо работало с LINQ to SQL, кажется очень тупым (или, возможно, невозможным) с Entity Framework. В частности, у меня есть объект, который включает свойство rowversion (как для управления версиями, так и для управления параллелизмом). Что-то вроде:

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

  [Timestamp]
  [ConcurrencyCheck]
  public byte[] Version { get; set; }
}

Я хотел бы иметь возможность принимать сущность в качестве входных данных и находить все другие сущности, которые были недавно обновлены. Примерно так:

Foo lastFoo = GetSomeFoo();
var recent = MyContext.Foos.Where(f => f.Version > lastFoo.Version);

Теперь в базе данных это будет работать: два значения rowversion можно без проблем сравнить друг с другом. И я проделал то же самое до использования LINQ to SQL, который отображает версию строки в System.Data.Linq.Binary , которые можно сравнивать. (По крайней мере, в той степени, в которой дерево выражения может быть отображено обратно в базу данных.)

Но в Code First тип свойства должен быть byte [] . И два массива нельзя сравнивать с обычными операторами сравнения. Есть ли другой способ написать сравнение массивов, понятных LINQ to Entities? Или преобразовать массивы в другие типы, чтобы сравнение могло пройти мимо компилятора?

19
задан Sixten Otto 15 September 2011 в 22:06
поделиться