0

エンティティの更新されたプロパティをパラメーターとして使用するために、EF (5.0、データベースが最初) でマップされた削除手順を取得しようとしています。

マップされたプロシージャーは、次の 2 つのパラメーターを取ります。

DeleteRow:
@Id : int          ->   (Key) Id : int32
@Modifiedby : char ->         Modifiedby : string

Modifiedbyコントローラーでは、削除手順が呼び出される前に値を変更したいと考えています。

Subscription subscription = context.Subscription.Find(id);
subscription.Modifiedby = "Test";
context.Subscription.Remove(subscription);
context.ChangeTracker.DetectChanges();
context.SaveChanges();

ただし、プロシージャが呼び出されると、常に古い値がModifiedby削除プロシージャに渡されます。

エンティティを削除する前に、データベースへの update 呼び出しを実行したくありません。

4

1 に答える 1

0

追跡されていないエンティティを使用してこれを解決することになりました。このブログ投稿からアイデアを得ました:

AsNoTracking()メソッド呼び出しが追加され、変更後にエンティティがコンテキストにアタッチされてから削除されます。

Subscription subscription = context.Subscription.AsNoTracking()
    .Include(i => i.RelatedEntity)
    .FirstOrDefault(c => c.SubscriptionId == id);
subscription.Modifiedby = "TEST-Subcription";
subscription.RelatedEntity.ToList().ForEach(f => f.Modifiedby = "TEST_Related");
context.Subscription.Attach(subscription);
context.Subscription.Remove(subscription);
context.SaveChanges();

これにより、マップされた削除プロシージャに新しいModifiedby値を送信できます。関連するエンティティにも新しい値を設定できます。これには、手順もマップされており、カスケード削除が設定されています。

于 2013-07-23T07:12:29.137 に答える