Я столкнулся со случаем, когда что-то, что достаточно хорошо работало с 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? Или преобразовать массивы в другие типы, чтобы сравнение могло пройти мимо компилятора?