在项目之外使用DbContext

时间:2015-07-20 16:03:38

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

我对MVC比较陌生,虽然我对大多数事情感到很自在,但我在不同的解决方案中有两个单独的MVC项目,我现在需要第二个与db支持第一个对于我正在构建的一些新功能。

我有时从我的解决方案中的其他项目中访问引用ApplicationDbContext类的数据库,如下所示:

context = new ApplicationDbContext();
        context.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["PortalConnection"].ConnectionString;

这在我当前解决方案中的其他项目中工作正常但是当我在我的第二个MVC站点(我的解决方案之外)中引用ApplicationDbContext类时,我无法像上面那样定义连接字符串......数据库设置无法访问(我需要在Debug版本和发行版本中更改连接字符串,因此我需要定义连接字符串。)。我认为这是因为它不在同一个解决方案中,因此我无法将原始MVC项目设置为构建顺序中的先决条件。

如何确保我在第二个解决方案中创建的新上下文对象在运行时使用正确的连接字符串?

JK

2 个答案:

答案 0 :(得分:2)

我认为您的困惑源于不知道连接字符串应该来自何处。连接字符串是由正在运行的程序集提供的依赖项。两个MVC项目都有自己的web.config文件,这两个文件都应该具有数据库的连接字符串。第二个项目不能使用第一个项目的连接字符串。

话虽如此,如果您在两个应用程序中使用完全相同的数据层(无论何种类型的应用程序),您最好制作一个包含DbContext和类和映射的单独程序集。同样,在运行时期间使用的连接字符串不在此项目中,而是在使用数据层的每个单独应用程序的配置文件中。

默认情况下,DbContext将查找具有其名称的连接字符串。因此,如果您的上下文为ApplicationDbContext,请使用类似

的命名连接字符串
  <connectionStrings>
      <add name="ApplicationDbContext" connectionString="Data Source=..." />
  </connectionStrings>

答案 1 :(得分:0)

以下是一些选择:

1 - 将您的控制器更改为ApiController,并通过webapi消耗您的数据;

2 - 将映射移动到类库,只需将此类库添加到两个解决方案:mvc app和另一个项目。