gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:57:15 25 4
gpt4 key购买 nike

我正在尝试扩展 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;
}
}

最佳答案

你应该可以这样做:

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 吗?我用一个新对象以及从数据库中提取的一个对象对其进行了测试,它似乎可以正常工作。

关于linq-to-sql - 实现 linqtosql 部分 DataContext 类 - 如何检查之前/之后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1058583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com