2011-08-16 3 views
1

サーバーデータの一部をクライアントデータセットと同期させておく必要があるサーバーとクライアントデータベースがあります。データベーススキーマは、サーバー上でIDENTITY(1,1)を使用した場合と同じです。StoreGeneratedPatternを変更して、Entity FrameworkにID付きの挿入ステートメントを生成させるにはどうすればいいですか?

データはサーバー上でのみ作成できます。サーバーのIDを使用してクライアントに挿入する必要があります。

CREATE TABLE [MyServer].[dbo].[Test1](
[Test1Id] [int] IDENTITY(1,1) NOT NULL, 
[Test1Value] [datetime] NOT NULL, 
CONSTRAINT [PK_Test1] PRIMARY KEY CLUSTERED ([Test1Id] ASC)) ON [PRIMARY] 

CREATE TABLE [MyClient].[dbo].[Test1](
[Test1Id] [int] NOT NULL, 
[Test1Value] [datetime] NOT NULL, 
CONSTRAINT [PK_Test1] PRIMARY KEY CLUSTERED ([Test1Id] ASC)) ON [PRIMARY] 

私はクライアント側でIDENTITYを挿入することができるようにアセンブリを再構築することなく、エンティティクラスのStoreGeneratedPatternを変更する方法はありますか?私はいくつかの時間を探して費やしました

EntityModelCodeGenerator 

しかし成功しません。

もちろん、私は起動時にこの変更を行うことができるので、私は別のアプリドメインでサーバーとクライアントを実行します。

私はデフォルトのEntityFrameworkクラスを使用しています。自分の問題が解決したら、POCOエンティティに変更できます。クラスは単純で、NavigationPropertiesではなくidで参照されます。

おかげ

答えて

-1

私の最終的な解決策は、DBに挿入する前に、StoreGeneratedPattern = "Identity"(クライアント/サーバー)を削除し、オブジェクトIDをコードに生成することです。こうすることで、私のコードはクライアント/サーバにとらわれず、デフォルト値のIDだけを作成できます。

0

私は同じ溶液から、クライアントとサーバーを実行するために私を可能にする一つの解決策を見つけたが、それは非常にハックと私は回避しようとします。私は、コードの中で生成されたGUIDをintに変更する方が良いでしょうし、StoreGeneratedPattern = "Identity"サーバも削除することになります。

ソリューションはありません私のクライアントのプロジェクトにポストビルドイベントを持っているだろう:

  1. は、ターゲットクラスの私のEDMXファイルからStoreGeneratedPattern =「アイデンティティ」を削除します。
  2. EDMXファイルを含むプロジェクトをビルドします。
  3. dllをCLIENTsプロジェクトにコピーします。
  4. 元のサーバーのdllファイルとedmxファイルを復元します。

もっと良い解決策はありますか?あなたは私がどこまで喜んで行くかを見て、GUIDは私にとってより良い解決策のようです。私が何かを逃しているかどうか私に知らせる。

関連する問題