レコードの作成は、単純なフローに従います。DBに類似するレコードがないかどうかチェックし、そうでない場合はレコードを作成します。 seriesInstUidは主キーではありません。主キーは、サーバー上のIDプロパティー設定を持つため、SQLサーバーによって作成されます。以下のコードのようにマルチスレッドアプリケーションでLINQ to SQLを使用して重複レコードを作成しないようにするにはどうすればよいですか?
:少数concurentスレッドが矢継ぎ早に同じコードを実行しようとしたときに問題がoccures
DataClassAsclepiusImagingDataContext db = new DataClassAsclepiusImagingDataContext();
var matchingSeries = from s in db.Series
where s.DDSeriesInstanceUID == dd.seriesInsUid
select s;
if ((matchingSeries == null) || (matchingSeries.Count() < 1))
{
Series ser = new Series();
db.GetTable<Series>().InsertOnSubmit(ser);
db.SubmitChanges();
}
、レコードが「レコードが存在する場合の間に別の発信者によって作成することができますか? " 「新しいレコードを作成しない場合」を選択します。このような場合、最初の発信者は複製を作成します。
このシナリオで重複が作成されないようにするには、どのような方法が適していますか?
#1が役に立つと思われます。ユニークな制約を打ち明けることができますか?私はSQL Server 2005を使用しています。唯一のfiedは一意でなければならず、主キーではありません。ありがとう。 – val
フィールドはプライマリキーである必要はありません。あなたはちょうどそれがユニークになりたい場合は、クエリを実行することにより、独特のcontraintを作成することができますように: ALTER TABLEシリーズ[PRIMARY] ON制約を追加[UN_Series_1] UNIQUE NONCLUSTERED ( \t [DDSeriesInstanceUID] ASC )することはできまた、SQL Server Management Studioから、テーブルを右クリックし、デザインを選択し、列を右クリックし、インデックス/リレーションシップを選択して、一意キーの新しいキーを作成します。 挿入/更新中に追加の検証を行う場合は、トリガを使用できます。http://msdn.microsoft.com/en-us/library/ms189799.aspx – sshah
列の形式はnvarchar [MAX]です。私はそれらをユニークな制約に設定することはできないと思いますか?新しいレコードの作成基準は、すべてのフィールドが同じレコードがない場合にのみ適用されます。何か案は?ありがとう。 – val