3

實體框架4.1數據庫第一,在生成的c#類中有一個構造函數,那麼我可以在哪裏做我的部分類自定義初始化?實體框架4.1部分類初始化

+0

我剛試過,生成的類沒有定義構造函數。 (我認爲我使用的是EF 4.0) – svick

+0

yes在4.0中可以,因此我創建了自己的構造函數,但是在4.1中,嵌套類型的類將創建一個構造函數來初始化嵌套字段 – tahir

+1

不生成構造函數調用一些你可以實現的「partial」方法? – svick

回答

7

據我瞭解,您的項目中有一個類似Model.edmx的文件,它實際上並不生成任何代碼。然後你有Model.tt,這是EF 4.1實際用來生成代碼的。你可以修改這個Model.tt。因此,如果您想要爲每個生成的實體添加對部分方法OnInitialized()的調用(從其構造函數中調用),請在Model.tt的代碼中找到構造函數(其第一行應該類似於public <#=code.Escape(entity)#>()),然後添加來電OnInitialized()地方到構造並宣佈部分方法:

partial void OnInitialized(); 

使用運行自定義工具重新生成實體就大功告成了。現在你可以做這樣的事情在你的非生成的代碼:

partial class SomeEntity 
{ 
    partial void OnInitialized() 
    { 
     // custom initialization code goes here 
    } 
} 

我不知道EF 4.1,所以它可能是有一個更好的辦法。

+0

它按預期工作,謝謝! – tahir

0
  1. 添加一個基類:

    public class CallBase 
    { 
         protected CallBase() 
         { 
          Initialize(); 
         } 
    
         protected abstract void Initialize(); 
    } 
    
  2. 添加局部類實現在另一個文件

    public partial class Call: CallBase 
    { 
        protected owerride void Initialize(); 
        { 
        ... 
        } 
    } 
    

的缺點是,所述初始化方法將之前被叫所有收集生物。