在我的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
我会全部设定。
请建议如何完成此操作。
答案 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; }
生成的代码将实现该抽象属性。