Linq to sql 实现linqtosql部分DataContext类-如何检查前/后值

Linq to sql 实现linqtosql部分DataContext类-如何检查前/后值,linq-to-sql,partial-classes,Linq To Sql,Partial Classes,我试图扩展VS设计器生成的linqtosql类,需要确定特定字段的值是否已更改。我是否有办法访问表/实体的DataContext更新方法中字段的前后值 这是我的密码: public partial class DataClassesDataContext { partial void UpdateActivity(Activity instance) { this.ExecuteDynamicUpdate(instance); //need to

我试图扩展VS设计器生成的linqtosql类,需要确定特定字段的值是否已更改。我是否有办法访问表/实体的DataContext更新方法中字段的前后值

这是我的密码:

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 entity类添加一个属性来表示该值是否已更改,但我不知道如何判断该值是否已更改。我不能只使用Activity类的OnAssignedToChanged方法,因为它会在设置属性值时激发,而不必更改。我正在使用ListView和LINQDataSource控件进行更新,因此无论发生什么情况,它都会被设置

我还认为我可能可以使用onAssignedToChange方法,但Activity实例在那个时候似乎没有当前值。以下代码不起作用,因为this.AssignedTo始终为null

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

您应该能够做到这一点:

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)
),它似乎对我很好。您确定初始值实际上不是空值吗?我用一个新的对象以及从数据库中提取的对象对它进行了测试,它似乎工作正常。

是的,我遗漏了什么吗?分部方法是在.NET3.5中添加的-如果您感兴趣,可以查找它们:)基本上,分部类可以声明分部方法,但不能定义分部方法。然后,您可以选择在单独的文件中实现它们。如果不存在,它的工作原理就好像所有关联的方法调用都不存在一样。对我来说非常有用。谢谢你,瑞安!回答得很好。我认为.NET4.5+1中的语法有点变化