我有一些由linq2SQL自动创建的对象。
我想编写一些代码,只要读取或更改这些对象的属性,就应该运行这些代码。
我可以在部分类文件中使用典型的get {// code}和set {// code}来添加此功能吗?目前我收到有关已定义此成员的错误。
这一切都有道理。
我是否必须创建一个方法来充当此功能的入口点,因为我无法重新定义此属性的get和set方法。
我希望只更新get和set,因为这意味着我不必更改应用中的所有参考点。但我想我可能只需要在任何地方更新它。
答案 0 :(得分:2)
当我想要这样做时我做的是使属性私有/不可访问(因为这可以作为DBML定义的一部分完成而不编辑生成的代码),并给它一个不同于我想要的属性的名称暴露。然后我使用我想要公开的名称在部分类中实现了一个公共包装器属性。然后(如果你想真的很花哨)实现一个LINQ提供程序,它可以将引用包装器属性的查询转换为引用底层属性的查询。我已经完成了所有这些并且它一直运行良好,但自定义LINQ提供程序很棘手。
答案 1 :(得分:2)
不确定阅读,但您可以跟踪对象的更改。例如。自动生成的实体有PropertyChangedEventHandler
个。
那么你做的是白化一个部分类(让我们假设你有一个Person
实体):
public partial class Person
{
public Person()
{
this.PropertyChanged +=
new PropertyChangedEventHandler(Person_PropertyChanged);
}
protected void Person_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// your code here
}
}
答案 2 :(得分:1)
除非您修改生成的代码,然后将其他代码添加到setter(例如使用WPF中的模式,使用INotifyPropertyChanged),否则这将是不可能的。