プロジェクトの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。完璧な小さなツール/アドインを作成する必要があるようです...