2013-03-13 32 views
1

我正在使用EF5的存儲庫模式,我想指定連接字符串的名稱。在EF5中爲api指定連接字符串

在我的大EF項目我曾經這樣做:

MyEntities _entities = new MyEntities("Name=MyConnectionString"); 

當我在VS2012創建了一個使用EF5一個新的「API」是沒有超載的字符串參數。

我試着這樣做:

private MyEntities _entities = new MyEntities(); 

public MyRepository() 
{ 
    _entities.Database.Connection.ConnectionString = "Name=MyConnectionString"; 
} 

我得到:

如何 「沒有名爲 'MyEntities' 的ConnectionString可在 應用程序配置文件中找到」我應該給存儲庫一個給定的連接字符串?我應該編輯這些代碼生成文件嗎?

回答

1

顯然,唯一需要的是使其工作的部分類。

這裏是我是如何做到的?

public partial class MyEntities : DbContext 
{ 
    public MyEntities(string connectionString) : base(connectionString) { } 
} 

之後,我能夠使用:

MyEntities _entities = new MyEntities("Name=MyConnectionString"); 
+0

部分??但這僅僅意味着你擴展了這個類的定義?你可以用一個構造函數來做到這一點??爲什麼要這樣做呢? – 2013-03-13 08:18:32

0

讓你MyEntities的構造函數,如:

public MyEntities() 
      : base("MyConnectionString") 
{ 

} 

和一個更通用的方法:

public MyEntities(string connectionString) 
      : base(connectionString) 
     { 
     } 

假設MyEntities類是繼承DbContext

的一個,並用它喜歡:

public MyRepository() 
{ 
    using (MyEntities db = new MyEntities()) 
    { 
    } 

    //or 
    using (MyEntities db = new MyEntities(connectionString)) 
    { 

    } 
} 
+0

「對象不包含一個構造函數參數1」 – 2013-03-13 07:57:50

+0

我相信它是從'DbContext'繼承的'MyEntities'。 – 2013-03-13 07:59:10

+0

現在看到我的答案。根據你的架構修改它 – 2013-03-13 08:03:31