繁体   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