2011-10-17 125 views
2

以我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到SQL)沒有得到override關鍵字,因此它不起作用。如果它有override我會全部設置。

請建議如何完成此操作。

回答

0

你可以做的基類abstract,然後Id屬性變得

public abstract int Id { get; set; } 

生成的代碼將實現抽象屬性。

+0

很好用。它要求每個子類都有價值,但在我們的模型中,它們都是。 – ZB1

0

部分類與重寫類不同。對於部分課你只是說。好吧,我有1班,但我已經分裂了多個文件的源代碼(主要是爲了維護原因,例如將自動生成的代碼從您自己的代碼中分離出來)。 C#編譯器只是將部分類的每個部分合並在一起,並將其威脅爲1個類。當然,重寫一個類意味着你創建一個新的類,它承擔了基類的特性。這是非常不同的。

現在指導EF如何生成代碼(假設您使用的是EF)可能但並不容易。你可以做的一個選擇是改變你的基類不使用Property Id,而是使用比較可識別的(和specifix?)名稱,比如'CompareIdentifier'。有了這個,你可以在派生類中重寫CompareIdentifier以返回自動生成的ID。當然,所有的比較工作與CompareIdentifier