簡體   English   中英

從同一解決方案MVC中的不同項目訪問EF ConnectionString

[英]Accessing EF ConnectionString from different project within same solution MVC

在嘗試分離關注點時,我正在使用ASP.NET MVC項目並將Models和DBContext放入同一解決方案中的單獨項目中。 現在我有一個包含ViewModels,Controllers和Views的Project.Web,我有一個Projects.Entities用於Models和DAL。 具有ConnectionString屬性的web.config文件位於Project.Web項目中。

Project.Web

  <connectionStrings>
    <add name="SchoolContext" connectionString="Data Source=localhost;Initial Catalog=ContosoUniversity1;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

家庭控制器:

public class HomeController : Controller
{
    private SchoolContext db = new SchoolContext();

Project.Entities

public class SchoolContext : DbContext
{
    public SchoolContext() : base("SchoolContext")
    {

    }

我的問題是,DBContext沒有獲取SchoolContext connectionString名稱,因為它在另一個項目的web.config中。 我該如何緩解這種情況? 當所有MVC組件都在同一個項目中時,一切正常。

這基本上就是我設置解決方案的方式。 我可以讓web項目web.config或測試項目app.config定義連接字符串。

數據項目

public class SchoolContext : DbContext
{
    public SchoolContext(string connectionString)
        : base(connectionString) { }
}

網絡項目

web.config中

<configuration>
    <connectionStrings>
        <add name="SchoolContextDb" connectionString="Data Source=..." />
    </connectionStrings>
    <appSettings>
        <add key="SchoolContext" value="SchoolContextDb" />
    </appSettings>
    ...
</configuration>

用法

string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SchoolContext"];

SchoolContext db = new SchoolContext("Name=" + ConnectionString);

我使用DI容器,所以我只在應用程序啟動代碼中查找連接字符串一次。 但是您可以將ConnectionString變量設置為全局變量或在基本控制器中設置。

默認情況下,入口點解決方案使用connectionstring檢查web.config並檢查參考項目。

  1. 使用此代碼段,它沒有獲得更多詳細信息,您收到任何錯誤。
  2. 你可以驗證你是否更改dbcontext名稱你得到了什么錯誤。 默認情況下,如果未設置,則使用dbcontext類定義類名。
  3. 驗證...
  4. 我希望你已經在配置文件中設置了設置。 驗證上下文和命名空間

  <entityFramework> <contexts> <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"> <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.DAL" /> </context> </contexts> </entityFramework> 

我在初始問題中的代碼就像一個魅力,即使DAL分成不同的項目。 問題是EF Code First Initializer沒有被執行,這是因為當我將初始化代碼移動到它自己的項目時,我在web.config文件中沒有正確的程序集。 修改后的web.config看起來應該是這樣的(我錯過了DAL在一個名為ContosoUniversity.Entities的項目中的.Entities。

  <entityFramework>
    <contexts>
      <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.Entities">
        <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity.Entities" />
      </context>
    </contexts>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM