2009-05-19 5 views
4

多かれ少なかれこの質問が示唆していることをしたい。 How do I MANUALLY set an Identity field in LINQ-To-SQL (IDENTITY INSERT)Autosyncの主キーフィールドにLinqを挿入

ただし、説明したいと思います。私はクライアントdbを持っています。ここからLinqオブジェクトをロードし、WCFを介してそれらを送信します。反対側では、それらをデータコンテキストに添付してテーブルに投稿します。問題は、Guidの列が設定されることです。この列は、DBMLのAutoSyncとしてマークされています。だからインサートの場合、Linqは私に新しい値を使用させます。私はそれが必要なときに私の価値を保つことを望みます。

アップデート1

は基本的に私は、オートシンクを反転したいとプログラム的にその場で設定IsDbGenerated。

[Column(Storage="_cName", 
     AutoSync=AutoSync.OnInsert, 
     DbType="UniqueIdentifier NOT NULL", 
     IsPrimaryKey=true, IsDbGenerated=true)] 
+0

おそらく、AutoSyncではなく、オンザフライでIsDbGeneratedを変更することをお勧めします。私は頭の上からこれをやる方法を知らない。 –

答えて

0

リフレクションを使用せずにオンザフライで属性を変更することはできません。あなたはlinqを手書きで別の方法でこれを行うことができるかもしれません。私はその場で属性を変更するようアドバイスすることはしません。設計上の属性なので、予期せぬ事態が起こっている可能性があります。

1

私は、両側で同じオブジェクト定義を使用したいが、一方の側で識別子を生成したい一方、もう一方の側では挿入したいという質問を言い換えると、私がこれを行うために知っている唯一の方法は、属性ベースではなくXMLベースのメタデータを使用することです。残念ながら、私が知る限り、ビジュアルDBMLデザイナーはXMLメタデータをサポートしていません。ただし、SqlMetalツールを使用してXMLを生成し、Webサービスの反対側で使用するためにファイルを変更することができます。

あなたはここにSqlMetalを使用して始めることができます:http://msdn.microsoft.com/en-us/library/bb386987.aspx

0

それは間違いなくあなたがオートシンクを見て、ないようにする必要がありますIsDbGeneratedプロパティです。

アプリケーションでIDを設定するシナリオの1つを説明しました。実際にデータベースで自動生成される必要がある別のシナリオがありますか?そうでない場合は、IsDbGenerated = falseを設定して、クライアントからIDを取得していない場合は、WCFサービスのGuid.NewGuid()を設定します。

ID列の代わりにrowguidを使用する利点の1つは、特定の値をrowguid列に挿入することが許可されているが、そうする必要はないということです。 DEFAULT NEWID()を使用して列見出しを列挙しておくこともできますが、サービスでIsDbGenerated = falseを設定すると、実際にIDを入力することを忘れない限り、引き続き機能します。

関連する問題