3

我正在尝试扩展 VS 设计器生成的 linqtosql 类,并且需要确定特定字段的值是否已更改。有没有办法让我访问表/实体的 DataContext Update 方法中字段的前后值?

这是我的代码:

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 实例此时似乎没有当前值。以下代码不起作用,因为 this.AssignedTo 始终为空。

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 回答