【问题标题】:C# 4.0/EF - Server-generated keys and server-generated values are not supported by SQL Server CompactC# 4.0/EF - SQL Server Compact 不支持服务器生成的键和服务器生成的值
【发布时间】:2010-04-29 02:28:17
【问题描述】:

我刚刚将我的一个项目移动到 VS2010/fx4.0 中,并使用 SQL CE 数据库作为后备存储。自从将其移至此版本的 .NET 后,我现在收到此错误:

SQL Server Compact 不支持服务器生成的键和服务器生成的值。

我的表定义为 SQLCE 必需的用户名(字符串)和 DoorOpen(日期时间)的 PK,每个都有一个 PK fx3.5 中的表格。现在我在 fx4.0 中,我很难过。我已经用谷歌搜索了这个,我找到的每个答案都是:

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]);

代码:

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 设置的。肯定是皮塔饼。看起来需要创建一个完美的小工具/插件...

【问题讨论】:

    标签: c# visual-studio c#-4.0 sql-server-ce entity-framework-4


    【解决方案1】:

    要检查的重要事项是 EDMX 文件,并确保该属性/列中没有身份的 StoreGeneratedPattern。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2016-07-24
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多