私の知る限り、そうではありません。削除したくない場合は...deleteを呼び出さないでください!ただし、他のいくつかのオプション:
- データベースにフラグを設定するだけのストアドプロシージャに削除をマップできます。
- 電話をかける前に
SubmitChanges
、変更を(経由で)上書きして修正できる場合がありますが、これが良いアイデアかどうかは疑問です。たとえば、アイテムを再挿入する必要がある場合があります。GetChangetSet
base.SubmitChanges
コード:
partial class MyDataContext {
public override void SubmitChanges(ConflictMode failureMode) {
var delta = GetChangeSet();
foreach(var record in delta.Deletes.OfType<Customer>()) {
Customers.InsertOnSubmit(record);
record.IsDeleted = true;
}
base.SubmitChanges(failureMode);
}
}
明らかに、より柔軟にする必要がある場合は、(厳密なプロパティGetTable()
ではなく)使用することをお勧めします。Customers
コメントの更新。正直なところ、その時点でそれができるとは思いません。「10の場所」について...IMOは、とにかくリポジトリインターフェイスの背後にデータコンテキストを隠す必要があるため、10の場所すべてがCreateUser
、データコンテキストと必要なロジックを処理するようなメソッドを呼び出します(おそらく別の一部のルールを処理するビジネスロジッククラス)。さらに、同時実行性の懸念があるため、一意性は通常、データベースレベルで(制約を介して)処理する必要があります。
しかし、それらを保存しようとする前に、あなたが望むことをするために:
partial class MyDataContext {
public override void SubmitChanges(ConflictMode failureMode) {
var delta = GetChangeSet();
foreach(var record in delta.Inserts.OfType<User>()) {
if(Users.Any(x=>x.Name == record.Name) {...throw an exception...}
}
base.SubmitChanges(failureMode);
}
}