内から保存私は現在、次のように構成されているデータベース内のテーブルを持っていますインターセプトし、リダイレクトエンティティのSaveChanges
OrderId | CustomerId | PartId | OrderDate | Quantity
1 | 23 | 45 | 2016-11-16 | 1
2 | 23 | 45 | 2016-11-16 | 1
3 | 23 | 45 | 2016-11-16 | 1
4 | 26 | 30 | 2016-10-25 | 1
5 | 26 | 30 | 2016-10-25 | 1
の代わりに::
OrderId | CustomerId | PartId | OrderDate | Quantity
1 | 23 | 45 | 2016-11-16 | 3
4 | 26 | 30 | 2016-10-25 | 2
、PartId、および受注日、私たちは、データベースに次の多くのインスタンスを持っています
私は規制/ロギングの問題によりデータベースを更新する権限がありません。更新によりレガシーコードが破損する可能性があります。しかし私は上司に、Entityを更新して、前進するデータにこれらの制約を適用させるように説得しました。
私の考えはDbContext
でレガシーコードが解除され、保存CustomerId
、PartId
、およびOrderDate
が既に存在する別の行、および既存の行のQuantity
列を追加しようとすると、その増加していることをSaveChanges
をオーバーライドすることです。これまでのところ、私は次のことがありますが、保存をキャンセルし、既存の行を更新し、その行をSaveChanges
から保存するように強制する方法がわかりません。
public override int SaveChanges()
{
var PartAssemblyList = ChangeTracker.Entries()
.Where(x => x.Entity is Order &&
x.State == EntityState.Added);
foreach (var entity in PartAssemblyList)
{
if (/*RowExists*/)
{
//Cancel Save (entity.State = EntityState.Unchanged)?
//Update Quantity of Existing Row
//Set existing row to save
}
}
return base.SaveChanges();
}
これは、ビジネスロジックとして1つ上に実装する必要があるようなものです。どんなクラスが行を追加するためにコンテキストを使用していても、最初に行を探し、存在する場合はカウントを増やすように変更する必要があります。私はあなたがそのコードを変更することができないかもしれないが、私はちょうど言っていることを理解しています。 IMHO、あなたはSaveChangesの動作を無効にしようとするワームの缶を開いています。あなたはこれを行うことで何を得るのですか?それをそのままにしておくことの欠点は何ですか? (はっきりとは別に)。ストレージが問題でない場合、私はあなたの上司と一緒です。そのまま残す。 – JuanR