我刚将一个项目移动到VS2010 / fx4.0中,并使用SQL CE数据库作为后备存储。自从将其移至此版本的.NET后,我现在收到此错误:
SQL Server Compact不支持服务器生成的密钥和服务器生成的值。
我的表 使用用户名PK(字符串)& DoorOpen(datetime)为SQLCE 必需 fx3.5中的每个表都有一个PK。现在我在fx4.0中,我很难过。我用Google搜索了这个,我找到的每个答案都是:
SQLCE不支持自动生成值(我当然不需要),所以在那里放置一个GUID ID并从代码中填充它。
我尝试了这种方法,但我仍然遇到同样的错误!
SQLCE:
CREATE TABLE [ImportDoorAccesses] (
[RawData] nvarchar(100) NOT NULL,
[DoorOpen] datetime NOT NULL,
[UserName] nvarchar(100) NOT NULL,
[CardNumber] bigint NOT NULL,
[Door] nvarchar(4000) NOT NULL,
[Imported] datetime NOT NULL,
[ID] uniqueidentifier NOT NULL -- new column
);
ALTER TABLE [ImportDoorAccesses]
ADD CONSTRAINT [PK_ImportDoorAccesses]
PRIMARY KEY ([ID] );
过去的约束是:
ALTER TABLE [ImportDoorAccesses]
ADD CONSTRAINT [PK_ImportDoorAccesses]
PRIMARY KEY ([DoorOpen],[UserName]);
CODE:
foreach (dto.DoorAudit newDoorAudit in dataTransferObject)
{
if (newDoorAudit.DoInsert)
{
myEntities.AddToImportDoorAccesses(new ImportDoorAccess
{
CardNumber = newDoorAudit.CardNumber,
Door = newDoorAudit.Door,
DoorOpen = newDoorAudit.DoorOpen,
Imported = newDoorAudit.Imported,
RawData = newDoorAudit.RawData,
UserName = newDoorAudit.UserName,
ID = Guid.NewGuid() // LOOK - HERE IT IS AS SUGGESTED!
});
}
}
myEntities.SaveChanges();
那么,现在呢?这是EF4中的错误吗?我做错了吗?
TIA
注:
浏览EDMX文件(右键单击,打开,使用XML)我发现我的一个日期列是使用 StoreGeneratedPattern =“Identity”设置的。
<EntityType Name="ImportDoorAccesses">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="RawData" Type="nvarchar" Nullable="false" MaxLength="100" />
<Property Name="DoorOpen" Type="datetime" Nullable="false" />
<Property Name="UserName" Type="nvarchar" Nullable="false" MaxLength="100" />
<Property Name="CardNumber" Type="bigint" Nullable="false" />
<Property Name="Door" Type="nvarchar" Nullable="false" />
<Property Name="Imported" Type="datetime" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="ID" Type="uniqueidentifier" Nullable="false" />
</EntityType>
然后我切换回漂亮的模型视图并单击数据库中的每一列,以确保设置为 NOT 。 PITA肯定。看起来需要创建一个完美的小工具/加载项......
答案 0 :(得分:3)
要检查的重要事项是EDMX文件,并确保此属性/列在那里没有StoreGeneratedPattern标识。