3

VSデザイナによって生成されたlinqtosqlクラスを拡張しようとしていますが、特定のフィールドの値が変更されたかどうかを判断する必要があります。テーブル/エンティティのDataContextUpdateメソッドのフィールドの前後の値にアクセスする方法はありますか?

これが私のコードです:

public partial class DataClassesDataContext
{
    partial void UpdateActivity(Activity instance)
    {
        this.ExecuteDynamicUpdate(instance);
        //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has
    }
}

また、Activityエンティティクラスにプロパティを追加して、値が変更されたかどうかを通知することもできますが、値が変更されたかどうかを確認する方法もわかりません。ActivityクラスのOnAssignedToChangedメソッドを使用することはできません。これは、プロパティ値が設定されるたびに発生し、必ずしも変更される必要がないためです。更新にListViewおよびLINQDataSourceコントロールを使用しているので、何があっても設定されます。

また、OnAssignedToChangingメソッドを使用できるかもしれないと思いましたが、Activityインスタンスにはその時点で現在の値がないようです。次のコードはこのようには機能しません。AssignedToは常にnullです。

partial void OnAssignedToChanging(int? value)
{
   if (value != this.AssignedTo)
   {
      _reassigned = true;
   }
}
4

1 に答える 1

9

あなたはこれを行うことができるはずです:

public partial class DataClassesDataContext
{
    partial void UpdateActivity(Activity instance)
    {
        Activity originalActivity = Activities.GetOriginalEntityState(instance);
        if (instance.Property != originalActivity.Property)
        {
            // Do stuff
        }
        this.ExecuteDynamicUpdate(instance);
        //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has
    }
}

別の選択肢:

public partial class DataClassesDataContext
{
    partial void UpdateActivity(Activity instance)
    {
        ModifiedMemberInfo[] changes = Activities.GetModifiedMembers(instance);
        foreach (var change in changes)
        {
            Console.WriteLine("Member: {0}, Orig: {1}, New: {2}", change.Member, change.OriginalValue, change.CurrentValue);
        }

        this.ExecuteDynamicUpdate(instance);
        //need to compare before and after values to determine if instance.AssignedTo value has changed and take action if it has
    }
}

他のオプション()にチェックインしたところ、OnAssignedToChanging(int? value)うまく機能しているようです。初期値が実際にnullではなかったと思いますか?新しいオブジェクトとデータベースから取得したオブジェクトでテストしましたが、正しく機能しているようです。

于 2009-07-01T15:47:28.193 に答える