2016-02-12 35 views
5

我們的ASP.NET 5/MVC 6項目通過訪問我們的數據庫,然後進入業務層組件,然後進入DAL(數據庫優先)程序集。嘗試執行使用DbContext訪問數據庫的業務層代碼時,MVC 6代碼崩潰:錯誤:在應用程序配置文件中找不到名爲「MyEntity」的連接字符串。我試圖用各種方式在MVC項目config.json,appsettings.json中定義MyEntity連接字符串,但沒有運氣。ASP.NET 5/MVC 6數據庫優先 - 在應用程序配置文件中找不到名爲MyEntity的連接字符串

如果從測試項目執行業務層方法,其中我有預期的app.config文件,連接字符串語法如下,它沒有問題。

這個問題也可以被重新表述爲如何將MVC 5遷移到MVC 6的應用程序,其中,所述MVC 5應用鬆散耦合DB訪問DAL層和MVC代碼有EF的NO知識和ONLY供給的DAL中的DbContext對象所需的web.config連接字符串?

任何幫助將不勝感激,讓我知道如果你需要任何更多的信息。在測試項目

配置文件語法:

<add name="MyEntity" 

connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" /> 

可能是錯誤的語法config.json文件。

{ 
    "Data": { 

"defaultConnection": { 

"connectionString": "metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
    }, 

"entityFramework": { 

"MyEntity": { 

"ConnectionString": "name=data:defaultConnection:connectionString" 
     } 
    } 
    } 
} 
+0

你的Startup.cs是什麼樣的?數據庫上下文是如何創建的? –

回答

1

如何創建數據庫上下文?

Migrate Configuration Settings from web.config

連接字符串可以在appsettings.json

{ 
    "Data": { 
     "DefaultConnection": { 
      "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;" 
     } 
    } 
} 

編輯 你可以得到你的連接字符串如下:

string connection = Configuration.Get<string>("Data:DefaultConnection:ConnectionString"); 
+0

數據庫上下文是通過ADO.NET實體數據模型嚮導,EF Designer從數據庫(現有數據庫)創建的... 是的,我嘗試了許多變體,例如您提到的網站沒有運氣。 [從web.config遷移配置設置](http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingconfig.html#migrate-configuration-settings-from-web-config) – Dave

+0

你將連接字符串傳遞給庫還是期望庫自動提取?查看我的關於如何獲取連接字符串的編輯。 –

0

非常感謝拉米爲你的有用的提示,我確實依靠EF來拿起連接字符串automatica LLY。這對MVC 5(和以前的版本)運行良好,可以使用Database First模型運行,我們可以指定預期的數據庫連接名稱,但MVC 6需要明確傳遞連接字符串。

我添加了額外的ctor,將連接字符串放在它自己的分部類文件中,因爲我們在做Database First,並且上下文文件被來自數據庫的連續模型更新覆蓋。如果在單獨的部分類/文件中保留新的ctor不會被覆蓋。

0

在config.json中指定連接對我無效。 我們需要將連接字符串從app.config文件移動到代碼中。這可以在context.cs文件中完成。 在構造函數中,你需要指定連接字符串

public partial class ProducerCentralEntities : DbContext 
    { 
     public ProducerCentralEntities() 
     : base(@"metadata = res://*/TestProj.csdl|res://*/TestProj.ssdl|res://*/TestProj.msl;provider=System.Data.SqlClient;provider connection string=';data source=serverName;initial catalog=databaseName;integrated security=True;MultipleActiveResultSets=True;application name=EntityFramework';") 
     { 
     } 
     } 

注: 1)你應該有完整的連接字符串 2)更換報價"與'

1

添加類數據層爲

public class ConfigHelper 
{ 

    public static string ConnectionString { get; set; } 

    public ConfigHelper(string conn) 
    { 
     ConnectionString = conn; 

    } 
} 

然後在startup.cs

var connectionString = Configuration["Data:"Connectionstring name":ConnectionString"]; 
ConfigHelper.ConnectionString = connectionString; 

現在

public partial class Context : DbContext 
{ 
    public Context() 
     : base(ConfigHelper.ConnectionString) 
    { 
    } 
} 

也是另一種方法將使用依賴注入。

0

將連接字符串放在app.config文件中。

相關問題