【问题标题】:How to create custom get and set methods for Linq2SQL object如何为 Linq2SQL 对象创建自定义获取和设置方法
【发布时间】:2010-04-27 15:40:01
【问题描述】:

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

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

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

这一切都说得通。

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

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

【问题讨论】:

    标签: c# linq linq-to-sql get set


    【解决方案1】:

    不确定读取,但您可以跟踪对象的更改。例如。自动生成的实体上有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】:

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

      【讨论】:

      • 也很有趣,但我喜欢能够只使用 dbml 自动生成的版本,而无需跟踪修改的想法。但是,您帖子末尾的内容让我有点不知所措。
      • 是的,我喜欢不必修改 DBML 生成的代码。这个解决方案允许我包装属性,而无需接触 DBML 生成的代码。希望最后的东西是不必要的。如果您想在直接对数据库执行 LINQ-to-SQL 查询而不是检索一些记录(不使用这些属性)然后查询/过滤您检索到的对象列表时使用包装的属性,您只需要这样做LINQ to Objects。
      【解决方案3】:

      除非您修改生成的代码,然后将其他代码添加到设置器(例如使用 WPF 中的模式,使用 INotifyPropertyChanged),否则这是不可能的。

      【讨论】:

      • 是的,绝对不想这样做,因为那样我就失去了 linq2sql 的自动生成功能。
      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2013-05-30
      • 2013-08-14
      相关资源
      最近更新 更多