2011-11-23 46 views
0

在生成的實體框架的實體文件的默認構造函數是這樣的:實體框架3.5:實體類的變化構造

public ProjectEntities() : base("name=ProjectEntities", "ProjectEntities") 
{ 
    this.OnContextCreated(); 
} 

我想將它更改爲:

public ProjectEntities() : base(UtilClass.GetEnvDependantConnectionStringName(), "ProjectEntities") 
{ 
    this.OnContextCreated(); 
} 

這是因爲我想爲所有的開發環境和生產環境提供一個不同的連接字符串,並且沒有機會混淆(這是我的自定義方法檢查的)。

我該怎麼做?每次設計器文件重新生成時,該代碼都會被丟棄。

回答

0

我們固定它通過撥打我們的實體ProjectEntitiesPrivate,什麼是partial class ProjectEntities之前,現在是一個非局部class ProjectEntities : ProjectEntitiesPrivate,用構造我需要:

public class ProjectEntities: ProjectEntitiesPrivate 
{ 
    public ProjectEntities():base(UtilClass.GetEnvDependantConnectionStringName()) 
    { 

    } 

.... 
+0

是的,但如何阻止程序員錯誤地調用基礎構造函數? –

+0

你不能,但名稱'私人'應該是一個提示:)。另外我添加了一條評論。由於我也希望能夠使用連接字符串調用構造函數,因此James提出的解決方案將無法工作。 – Halfgaar

+0

謝謝,我遇到了同樣的問題,最後我修改了模板文件(Model.context.tt)中的構造函數代碼,這很容易做到。 –

0

您需要在自動創建的ProjectEntities.Designer.cs旁邊創建另一個文件,比如ProjectEntities.cs。在使用部分來擴展你的實體類的功能是這樣的:

public partial class ProjectEntities : ObjectContext 
{ 
    partial void OnContextCreated() 
    { 
    this.Connection.ConnectionString = UtilClass.GetEnvDependantConnectionString(); 
    } 
} 

該文件將在您重新生成了.Designer.cs文件中未再得到改變。你必須自己獲取連接字符串...

+0

這是有效的,除了當你還使用構造函數(字符串連接字符串)時,你總是會在OnContextCreated中重置你的連接字符串。我用我們最終使用的解決方案回答了我的問題。 – Halfgaar