7

私たちの開発者は、私のデータベースと通信するlinq-2-sqlプロジェクトを持っています。データベースはマージレプリケーションに関与しています。それはしばらくの間使用されていて、うまく機能していました。最近のテーブルがスキーマに追加され、新しいレコードが追加されたときに問題が発生しています。

ユーザーは、マージレプリケーションが自動的に作成するGUIDに関連するインデックスが一意の制約に違反していることを示すエラーメッセージを受け取ります。

私が言えることから、このテーブルは他の関係者と何ら変わりはありません。レプリケーションパブリケーション/サブスクリプションモデル全体を最初から再作成しましたが、その1つのテーブルを除いてすべてが引き続き機能します。

誰かアイデアはありますか?作成中のGUIDは00000000-0000-0000-0000-000000000000と表示され、重複している理由を説明します。有効なGUIDがlinqによって作成されないのはなぜですか?

4

4 に答える 4

21

「Guid.NewGuid()」という意味のときに、コードベースのどこかで「newGuid()」を使用しましたか?

于 2011-08-09T18:58:21.637 に答える
5

私も同様の問題に直面していました。Markがコメントで述べているように、Guid()を適切に使用する必要があります。

Guid asm = new Guid(); // gives 00000000-0000-0000-0000-000000000000

代わりに使用する

Guid asm = Guid.NewGuid();
于 2011-08-09T19:00:14.553 に答える
3

Linq-To-SQLを使用する場合は、IsDbGeneratedプロパティがtrueであり、データベースが実際にIDを作成するように設定されていることを確認してください(デフォルト値としてnewid()を使用)。

それ以外の場合は、.netコードが実際にIDを生成していることを確認してください。

于 2011-08-09T18:58:36.550 に答える
2

あなたの提案を調査しているときに私たちが発見したのは、この特定のテーブルがDBMLクラスにguidフィールドを含む唯一のテーブルであるということでした。他のすべてのテーブルは、マージレプリケーション用にデータベースを公開する前にDBMLに追加されていました(したがって、それぞれのGUIDフィールドはDBMLに含まれていませんでした)。

そこで、 DBMLの問題テーブルからguidフィールドを手動で削除すると、問題は解決しました。この問題は、実際には、生成されたクラスでLINQがGUIDを作成しないことが原因でした。

この場合、GUIDの作成をパブリケーショントリガーとSQLで確立されたnewid()のデフォルト値に任せるのが最も簡単でした。(dbmlではなく、まだデータベースにあります)

アプリケーションにはこれらのGUIDフィールドを使用するものはありません...実装したマージレプリケーションスキームをSQLが管理するためだけのものであるため、DBMLからの削除が最も簡単でした。

于 2011-08-09T20:45:45.253 に答える