Entity Framework 4 и SQL Server 2008 R2 захвата данных изменений не играют хорошо вместе
Когда я пытаюсь использовать эти две функции вместе, я получаю ошибку компиляции в моей модели (обратите внимание, я переименовал сущность для моей таблицы _CT в "ContentHistory", а мой проект модульного теста SL4 называется "DomainServices.UnitTest":
Error 39 Property 'DomainServices.Web.ContentHistory.C___seqval' is marked as a key
property and is of Type 'System.Byte[]', which is not a supported type for a key member.
DomainServices.UnitTests
Кто-нибудь здесь получил CDC и EF4, чтобы хорошо играть вместе?
1 ответ
Хорошо, вот что я сделал, чтобы обойти эту проблему. Я убедился, что каждая таблица, на которой я хочу включить CDC, имеет LastModified
столбец типа datetime
, Затем я добавил ключ (с точки зрения EF), состоящий из LastModified
столбец и __$operation
колонка. Я полагаю, что это "вероятно, уникально" (что несколько пугает, но, вероятно, хорошо). Я считаю, что LastModified
с точностью до 3 мс, поэтому единственный раз, когда я (реально) получу 2 строки в моей таблице CDC с той же LastModified
находится на обновлении; но при обновлении эти две строки будут иметь разные __$operation
значения (а 3 и а 4). Таким образом, составление их вместе по крайней мере имеет смысл для ключа. Я не большой поклонник этого и хочу, чтобы EF4 поддерживал таблицы без ключей. Если у кого-то есть предложения, пожалуйста, дайте мне знать.