Entity Framework 4 и SQL Server 2008 R2 Изменение захвата данных не играют красиво вместе
Вопрос
Когда я стараюсь использовать эти две функции вместе, я получаю ошибку компиляции на мою модель (Примечание, я переименовал ли предприятие для моей таблицы «ContentHistory», и мой тестовый проект «ContentHistory» называется «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, чтобы играть красиво вместе?
Решение
Хорошо, вот что я сделал, чтобы обойти этот вопрос. Я убедился, что каждый стол, который я хочу включить CDC, имеет LastModified
колонка типа datetime
. Отказ Затем я добавил ключ (с точки зрения EF), состоящий из LastModified
колонна и то __$operation
столбец. Я рисую это «наверное уникально» (что несколько пугается, но, вероятно, хорошо). Мои рассуждения в том, что LastModified
точен около 3 мс, поэтому единственный раз, когда я (реально) получаю 2 строки в моем таблице CDC с тем же LastModified
на обновлении; Но на обновлении эти два ряда будут иметь разные __$operation
значения (A 3 и A 4). Таким образом, составляют составные составляющие, по меньшей мере, хоть смысла для ключа. Я не большой поклонник этого, и желаю, чтобы EF4 поддерживать таблицы без ключа. Если у кого-то есть предложение, пожалуйста, дайте мне знать.