4

プロジェクトの1つをVS2010/fx4.0に移動し、SQLCEデータベースをバッキングストアとして使用しています。このバージョンの.NETに移動してから、次のエラーが発生します。

サーバーで生成されたキーとサーバーで生成された値は、SQLServerCompactではサポートされていません。

SQLCEではfx3.5のすべてのテーブルにPKが必要だったため、私のテーブルUserName(文字列)とDoorOpen(日時)のPKで定義されました。今、私は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で開く)を調べたところ、日付列の1つが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>

次に、きれいなモデルビューに戻り、データベース内のすべての列をクリックして、これが設定されていないことを確認しまし。確かにPITA。完璧な小さなツール/アドインを作成する必要があるようです...

4

1 に答える 1

3

チェックする重要なことは、EDMXファイルであり、このプロパティ/列にIDのStoreGeneratedPatternが含まれていないことを確認します。

于 2010-04-29T05:58:07.153 に答える