1

我有兩個項目的解決方案:ASP.NET 帶有EF6的Web項目和類庫。在老ASP.NET 4的世界,我曾與構造的DbContext類:在ASP.NET 5/EF中獲取數據庫連接字符串6

public MyModel() : base("name=MyModel") { } 

然後在web應用程序,我在web.config中的連接字符串。我也有一個DefaultConnection值用於基於成員身份的識別。

現在我試圖去到ASP.NET 5.默認連接字符串以「新」方式工作(我從頭開始標識,最終我不會使用基於DB的身份驗證) - 我得到身份驗證正常。默認連接字符串位於appsettings.json中。但是,無論我嘗試了什麼,我都會收到錯誤No connection string named 'MyModel' could be found in the application config file。我試着將name=MyModel更改爲name=Data:AAOModel:ConnectionString,建議here,但我仍然得到與新值相同的異常。

appsettings.json的有關部分是這樣的(我知道我可以分成config.json - 但它並沒有任何區別):

"Data": { 
"DefaultConnection": { 
    "ConnectionString": "Server=(localdb)\\MSSQLLocalDB;Database=..." 
}, 
"MyModel": { 
    "ConnectionString": "Server=dbserver;Database=BusinessDB..." 
} 

}

我也試着在啓動中使用ConfigureServices() IdentityContext被添加到腳手架代碼中,並描述爲here。但是,我注意到IdentityContext派生自Microsoft.Data.Entity,但我的MyModel派生自System.Data.Entity,而services.AddDbContext <>()不喜歡它。

目前感覺我嘗試了谷歌可以購買的所有排列組合。使用帶有EF6類庫的ASP.NET 5的正確方法是什麼?

+0

你能否把你的全部源代碼,GitHub上? – user929794

回答

0

你有幾個很容易的選擇:

1:開始使用實體框架7.

  • 它的發佈時間表協調定時與Asp.net 5,有些功能可能會丟失的一段時間雖然
  • 你會再使用AddDbContext因爲你已經嘗試過

2:您可以將整個連接字符串的構造函數/ BAS e創建上下文時,使用Asp.net配置從json配置中提取值。

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

  • 在EF6基部上下文需要的連接字符串的任一名稱(在配置看)或實際連接字符串本身。
+0

由於EF庫在一個單獨的類庫中,因此2對我無效。即使當我試圖在同一個庫中使用EF模型時,它也不起作用。所以我們決定去1(EF)。之前我們覺得缺少的功能(特別是從現有數據庫生成的Code-First類太重要了,不能錯過。幸運的是,它現在運行得更好了。 雖然我認爲這個答案沒有增加任何內容,只是重申了問題的含義,它證明了我沒有錯過任何東西 - 沒有什麼比這更好的了,現在使用ASP.NET 5的EF6問題對我來說是無根據的,我會接受它 – Felix

2

我試圖@瑞安的#2的方法,它有點工作,但通過傳遞連接字符串(或SqlConnection對象)實例DbContext會告訴EF創造的Code First背景下,這在我的情況下,EDMX的類不是Code First兼容。 EDMX的課程(如果您願意的話,poco)必須是Code First友好的,否則將無法使用。

我的解決方案是簡單地在網站項目中添加App.config文件。

我不喜歡這種解決方法,但是當你必須使用EF 6和ASP.NET 5 Web項目時,你必須做你必須做的事情。

的App.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="SomethingEntities" connectionString="metadata=res://*/Entities.Something.Entities.csdl|res://*/Entities.Something.Entities.ssdl|res://*/Entities.Something.Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\;initial catalog=Db_Local;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration>