Можно ли отобразить тип rowversion SQL Server на что-то более удобное, чем byte [], используя Entity Framework? - PullRequest
1 голос
/ 07 ноября 2011

Когда я объявляю поле rowversion SQL Server в модели хранения и позволяю Entity Framework выполнять сопоставление по умолчанию, поле rowversion отображается в байтовый массив.

Можно ли сопоставить его с более дружественным типом (который позволил бы выражать операторы равенства и сравнения со стороны .NET)? Учитывая, что базовый тип для преобразования строк является двоичным (8), я полагаю, что можно отобразить его на 64-разрядное целое число.

Вот определения свойств, используемые в настоящее время:

SSDL:

<Property Name="lastModifiedRowVersion" Type="timestamp" Nullable="false" StoreGeneratedPattern="Computed" />

CSDL:

<Property Name="LastModifiedRowVersion" Type="Binary" FixedLength="true" MaxLength="8" Nullable="false" ConcurrencyMode="Fixed" />

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

К сожалению, это невозможно, потому что EF не имеет какой-либо функции преобразования данных.Если вы хотите использовать 64-битное целое число, вы все равно должны отобразить байтовый массив и выставить второе не сопоставленное свойство, преобразовав массив в целое число. Здесь у вас есть кое-что еще о сравнении метки времени в приложении.

0 голосов
/ 05 октября 2015

Я использую вычисляемый столбец для этого. ISNULL означает, что EF POCO будет long, а не Nullable<long>.

...
Revision                ROWVERSION,
Revision64              AS ISNULL(CAST(Revision AS BIGINT), 0),
...
...