我正在尝试扩展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实例似乎没有当前值。以下代码不起作用.AssignedTo始终为null。
partial void OnAssignedToChanging(int? value)
{
if (value != this.AssignedTo)
{
_reassigned = true;
}
}
答案 0 :(得分: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)
),它似乎对我很好。你确定初始值实际上不是空的吗?我测试了一个新对象以及一个从数据库中提取的对象,它似乎正常工作。