0

SQL 2008バックエンドでsubsonicを使用してべき等の挿入行を実行するにはどうすればよいですか?

例えば

名前が主キーであるテーブル「Colors」があります。

Color c = new Color;
c.name = "red";
c.Save;

Color c2 = new Color;
c2.name = "red";
c2.Save; // throws duplicate key error;

エラーをトラップできることはわかっていますが、MySqlでREPLACEのようなことをしたいと思います

4

2 に答える 2

1

私はあなたの問題を再現しなかったので、あなたの問題に対する直接の答えはありませんが...

文字列をPKとして使用することはあまり良い習慣ではありませんが、INT主キーと説明列Varcharを使用して文字列を使用してみませんか?データベースはテキストよりもはるかに高速に整数にインデックスを付けるため、このテーブルとの関係ははるかに高速になります。

于 2010-03-23T15:40:40.580 に答える
1

固有の制約がある場合は、検証を自分で処理するのが最善のオプションだと思います。値がテーブルに複製されるかどうかの検証は、ORMのスコープを超えています。ORMは、thowsが例外をスローしたときに処理する検証に合格し、それに応じて動作するのはユーザー次第です。

検証に必要なことについて少し考えてみましょう。挿入コマンドを実行する前に、値がデータベース上で重複します...1.一意の列を持つすべての列に対してSELECTを実行する必要があります。それを検証する制約は、挿入されようとしている値をすでに持っています。2.そうでない場合は、INSERTを実行します。3.もしそうなら、例外をスローしますか?...これは今起こっていることです...

だから、それを吹き飛ばしましょう!:)それが吹き飛ばされる準備をして(保存をTry / Catch内にラップする)、それに応じて行動します。

乾杯!アレックス

于 2010-03-24T00:30:11.323 に答える