在项目外部使用DbContext



我对MVC比较陌生,虽然我对我所做的大多数事情都很满意,但我在不同的解决方案中有两个独立的MVC项目,我现在需要第二个与支持第一个的数据库进行通信,以获得我正在构建的一些新功能。

我有时访问这个数据库引用ApplicationDbContext类从我的解决方案中的其他项目,像这样:

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

这在我当前的解决方案中的其他项目中工作得很好,但是当我在我的第二个MVC站点(在我的解决方案之外)引用ApplicationDbContext类时,我不能像上面那样定义连接字符串……数据库设置不可访问(我需要连接字符串在调试与发布版本中更改,所以我确实需要定义连接字符串。)。我认为这是因为它不在同一个解决方案中,所以我不能将原始MVC项目设置为构建顺序中的先决条件。

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

JK

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

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

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

  <connectionStrings>
      <add name="ApplicationDbContext" connectionString="Data Source=..." />
  </connectionStrings>

这里有几个选项:

1-将你的控制器改为ApiController,并通过webapi使用你的数据;

将你的映射移动到一个类库,并将这个类库添加到两个解决方案:mvc app和另一个项目。

最新更新