3

当我尝试将这两个功能放在一起时,我的模型出现编译错误(请注意,我已将实体更名为我的_CT表“ ContentHistory”我SL4单元测试项目被称为‘DomainServices.UnitTest’:实体框架4和SQL Server 2008 R2更改数据捕获不能很好地合作

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很好地一起玩

+0

好的,所以这里就是这样的故障。数据库中的CDC表没有主键。因此,EF4推断了这个关键。这不是很好的选择。对于这个问题,我不确定什么是好的选择,因为二进制(10)和varbinary(128)对EF4中的键列无效。 – 2010-09-16 19:28:12

+0

你只是想用EF来读* CDC表,对吗? – 2010-09-20 02:35:38

+0

是的,这是正确的。 – 2010-09-20 13:04:10

回答

0

好了,这里是我做了什么来解决?这个问题我确信每个我想启用CDC的表都有一个LastModified类型的列datetime然后,我添加了一个密钥(从EF观点来看)由LastModified列和__$operation列组成。我认为这是“可能是独一无二的”(这有些可怕,但可能还可以)。我的推理是LastModified准确到约3ms,所以我唯一一次(实际上)在我的CDC表中获得2行,并且使用相同的LastModified进行更新;但是,在更新时,这两行将有不同的__$operation值(a 3和a 4)。所以,将这些加在一起至少使得一个关键点有一定的感觉。我并不是很喜欢这一点,并希望EF4能支持没有按键的桌子。如果有人有建议,请让我知道。

+0

重申,我不喜欢这个答案。这正是我正在做的“过得去”。如果有更好的答案,有人请在下面:) – 2010-09-21 18:51:28