Linq to sql 实现linqtosql部分DataContext类-如何检查前/后值
我试图扩展VS设计器生成的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
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中的语法有点变化