覆盖生成的部分类中的虚方法

时间:2011-10-17 02:22:46

标签: linq-to-sql class virtual partial

在我的LINQ生成类中,我有这个方法:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id",
             AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", 
             IsPrimaryKey=true, IsDbGenerated=true)]
public int Id
{
    get
    {
        return this._Id;
    }
    set
    {
        if ((this._Id != value))
        {
            this.OnIdChanging(value);
            this.SendPropertyChanging();    
            this._Id = value;            
            this.SendPropertyChanged("Id");
            this.OnIdChanged();
        }
    }
}

在我的编码部分类中,我从基类扩展。基类定义:

public virtual int Id { get; set; }

概念是我可以在基类级别添加Equals和Hashcode,以及在基类级别添加一些其他功能。问题是生成的类(来自LINQ-to-SQL)没有得到override关键字,所以它不起作用。如果它有override我会全部设定。

请建议如何完成此操作。

3 个答案:

答案 0 :(得分:0)

部分类与覆盖类不同。你只是说一个部分课程。好吧,我有1个类但我已经将源分解为多个文件(主要是出于可维护的原因,例如从您自己的代码中拆分自动生成的代码)。 C#编译器只是将一个部分类的每个部分合并在一起并将其威胁为1个类。覆盖类的当然意味着您创建一个具有基类特征的新类。那是非常不同的。

现在有可能但不容易指导EF如何生成代码(假设您正在使用EF)。您可以做的一个选择是更改您的基类不使用Property Id,而是更易识别(和指定?)名称,如'CompareIdentifier'。有了它,您可以覆盖派生类中的CompareIdentifier,以返回自动生成的ID。并且当然会对CompareIdentifier进行所有比较工作

答案 1 :(得分:0)

我会围绕这个创建一个包装类。

答案 2 :(得分:0)

您可以创建基类abstract,然后Id属性变为

public abstract int Id { get; set; } 

生成的代码将实现该抽象属性。