Linq - 如何将公共字段放在基类中

时间:2010-06-16 15:17:05

标签: linq-to-sql

我正在尝试找到一种方法,以便我可以将一些常用功能推送到我的Linq to SQL处理的基类中。我有两个字段(ID和InsertUpdateOperID),这些字段对于大多数但不是所有表都是通用的。在我第一次出现时,我创建了一个名为BaseEntity的类,它有这些字段。不幸的是,我所完成的只是隐藏了.designer.cs文件中的值。我找到了一个如何完成我想要的例子以便解决这个问题(http://www.joe-stevens.com/2009/07/01/linq-to-sql-set-inheritance-modifiers-with-sqlmetal/)。根据这篇文章,我修改了DBML文件,以便我可以将override修饰符添加到包含这两个字段的表的ID和InsertUpdateOperID属性中。

这样做的最终结果是.designer.cs文件在我想要的地方添加了覆盖限定符。这使我能够创建我的BaseEntity类。我将ID字段和InsertUpdateOperID字段定义为:

public virtual int ID                 { get; set; }  
public virtual int InsertUpdateOperID { get; set; } 

这样做似乎工作正常。

对我来说,问题是我讨厌修改生成的代码。任何人都可以建议一种方法让我将常用字段和方法放在基类中的那些公共字段上,以便我可以完成我想要的而不修改生成的.dbml?

由于

1 个答案:

答案 0 :(得分:1)

我今天面临同样的问题(哇,这是你发布后的1。5年),并且努力解决问题,到目前为止它对我有好处。

基类中的

    public virtual int __ID
    { 
        get
        {
            PropertyInfo pi = this.GetType().GetProperty("ID");
            int id = (int)pi.GetValue(this, new object[] {});
            return id;
        }
        set
        {
            PropertyInfo pi = this.GetType().GetProperty("ID");
            pi.SetValue(this, value, new object[] { });
        }
    }

这看起来很无声,但它确实有效! 注意__之前的ID,因为在自动生成的代码中有alread ID和_ID。由于它完全是一种新的访问ID的第三种方式,因此不需要“覆盖”。 如果需要,可以在基类中或通过基类使用__ID。