代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

如何为linq2sql对象创建自定义get和set方法

  •  0
  • Chris Barry  · 技术社区  · 15 年前

    我有一些对象是由linq2sql自动创建的。

    我想写一些代码,这些代码应该在读取或更改这些对象的属性时运行。

    我可以在部分类文件中使用典型的get//code和set//code来添加这个功能吗?目前,我得到一个关于这个成员已经被定义的错误。

    这一切都是有道理的。

    是否必须创建一个方法作为此功能的入口点,因为我无法重新定义此属性的get和set方法。

    我希望只更新get和set,因为这意味着我不必更改应用程序中的所有参考点。但我想我可能需要在任何地方更新它。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Oleks    15 年前

    不确定是否读取,但可以跟踪对象的更改。例如有 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
  •  2
  •   BlueMonkMN    15 年前

    当我想这样做的时候,我做的是使属性私有/不可访问(因为这可以作为DBML定义的一部分而不编辑生成的代码),并给它一个与我想公开的属性不同的名称。然后,我在一个部分类中实现了一个公共包装属性,使用我想要公开的名称。然后(如果您真的想要花哨点的话)实现一个LINQ提供程序,它可以将引用包装器属性的查询转换为引用基础属性的查询。我已经完成了所有这些工作,并且工作得很好,但是定制的LINQ提供者很棘手。

        3
  •  1
  •   Tejs    15 年前

    除非您修改生成的代码,然后向setter添加额外的代码(例如使用wpf中的模式和inotifypropertieschanged),否则这是不可能的。