Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在项目外部使用DbContext_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 在项目外部使用DbContext

C# 在项目外部使用DbContext,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我对MVC比较陌生,虽然我对我所做的大多数事情都很满意,但我有两个不同解决方案的独立MVC项目,现在我需要第二个项目与支持第一个项目的db沟通,以实现我正在构建的一些新功能 我有时会从解决方案中的其他项目中引用ApplicationDbContext类访问此数据库,如下所示: context = new ApplicationDbContext(); context.Database.Connection.ConnectionString = ConfigurationManag

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

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

context = new ApplicationDbContext();
        context.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["PortalConnection"].ConnectionString;
这在我当前解决方案中的其他项目中很好,但是当我在第二个MVC站点(在我的解决方案之外)中引用ApplicationDbContext类时,我无法像上面那样定义连接字符串。数据库设置不可访问(我需要在调试版本和发布版本中更改连接字符串,因此我确实需要定义连接字符串。)我假设这是因为它不在同一个解决方案中,因此我无法将原始MVC项目设置为构建顺序中的先决条件

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

JK

这里有几个选项:

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


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

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

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

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

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


它们在同一个解决方案下吗?如果是这样,你可以创建另一个项目来处理所有DAL。不,它们不在同一个解决方案下。这是我的问题。奇怪的是,我不能从其他解决方案中访问ApplicationDbContext的数据库设置,我在同一个解决方案中做得非常好。这是错误的。您应该为每个项目创建一个DAL,只需在一个项目与另一个项目之间进行通信。@Kram DbContext表示一个数据库;如果它实际上是两个应用程序将使用的同一个数据库,则创建DAL项目的第二个副本是一个巨大的时间浪费。最好引用它,并意识到如果架构发生更改,您需要更新两个应用程序。When引用来自我的第二个解决方案,但是我不能用我在问题中写的相同方式指定连接字符串…由于我缺乏经验,我不确定当项目1不是作为依赖项构建时调试/发布转换是否能正常工作?在2中-你指的是将ApplicationDbContext放置在不同的项目中?会吗这有助于我在解决方案之外访问它?ApicController点是一个很好的点,因为它很灵活,不会太麻烦,但最好能够扩展解决方案2的功能,而不必经常修改解决方案1的ApicController。解决方案2与Db的通信可能会发生很大变化是的,您只需要在两个解决方案中共享连接字符串。第二个选项更易于维护,假设两个应用都可以遵循相同的发布计划。如果它们不遵循,则可能会更好,因为构建web服务只是为了公开您的数据(无论如何,这是一个坏主意;构建一个公开业务用例的服务器,而不是数据库的薄包装器)更昂贵。所以你们认为的解决方案是从第二个解决方案中引用的?就在每个版本构建中,我还需要重新构建第一个解决方案。我仍然对第二个解决方案中DbContext类的连接字符串感到困惑,以及我如何确保它使用正确的字符串进行调试/发布感谢reply、 我明白。我在第二个解决方案中有连接字符串,但是我通常的方法是确保使用连接字符串(如我的问题中所述)在我的第二个解决方案中不起作用。我不知道命名约定。我的上下文类使用DefaultConnection作为应用程序设置中的连接字符串,因此我将对其进行命名,以便它可以找到它。很抱歉,我对自己的解决方案缺乏了解,我不久前继承了它,因此仍有一些问题未解决。