c# - 从同一解决方案 MVC 中的不同项目访问 EF ConnectionString

标签 c# asp.net-mvc entity-framework

在尝试实践关注点分离时,我采用了一个 ASP.NET MVC 项目,并将模型和 DBContext 放入同一解决方案中的单独项目中。现在我有一个包含 ViewModel、 Controller 和 View 的 Project.Web,并且我有一个用于模型和 DAL 的 Projects.Entities。具有 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>

家庭 Controller :

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

项目.实体

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

    }

我的问题是 SchoolContext connectionString 名称没有被 DBContext 获取,因为它在另一个项目的 web.config 中。我该如何缓解这种情况?当所有 MVC 组件都在同一项目中时,一切正常。

最佳答案

这基本上就是我设置解决方案的方式。我可以让 web 项目 web.config 或测试项目 app.config 定义连接字符串。

数据项目

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

网络项目

网络配置

<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 变量设为全局变量或在基本 Controller 中设置。

关于c# - 从同一解决方案 MVC 中的不同项目访问 EF ConnectionString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29135526/

相关文章:

c# - 如何确定本地主机的 IPv4 地址?

c# - Microsoft Chart Control 中的折线图

c# - Kendo UI 网格中的内联编辑?

c# - DbSortClause 表达式的类型必须是顺序可比参数名称 :Key

C# - 为什么我需要初始化一个 [Out] 参数

c# - 使用 twitter bootstrap radio-button 作为 html.radiobutton 的替代品

asp.net-mvc - 用虚拟数据填充 POCO 的最佳方法是什么?

c# - 配置文件属性不起作用

c# - 使用 Linq to Entities 实现 DateTime.ToString(string)

c# - 从 EF.core 2.2 迁移到 EF.core 3.1 会破坏生成的 sql,将 1 添加到某些列名