jos*_*shb 3 partial-classes linq-to-sql
我正在尝试扩展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
}
}
Run Code Online (Sandbox Code Playgroud)
我也愿意在Activity实体类中添加一个属性来表示值是否已更改,但我无法弄清楚如何判断值是否已更改.我不能只使用Activity类的OnAssignedToChanged方法,因为只要设置了属性值就会触发,不一定会更改.我正在使用ListView和LINQDataSource控件进行更新,因此无论如何都会设置它.
我还以为我可以使用OnAssignedToChanging方法,但是Activity实例似乎没有当前值.以下代码不起作用.AssignedTo始终为null.
partial void OnAssignedToChanging(int? value)
{
if (value != this.AssignedTo)
{
_reassigned = true;
}
}
Run Code Online (Sandbox Code Playgroud)
你应该能够做到这一点:
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
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚检查了你的另一个选项(OnAssignedToChanging(int? value)),它似乎对我很好.你确定初始值实际上不是空的吗?我测试了一个新对象以及一个从数据库中提取的对象,它似乎正常工作.
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |