2015-07-20 44 views
2

我对MVC比较陌生,虽然我对大多数事情都很满意,但我有两个单独的MVC项目,它们在不同的解决方案中,现在我需要第二个与之通信的项目数据库支持我正在构建的一些新功能的第一个。在项目之外使用DbContext

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

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

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

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

JK

+0

它们是否处于相同的解决方案下?如果是这样,您可以创建另一个处理所有DAL的项目。 – Kram

+0

不,他们不在同一个解决方案下。这是我的问题atm。奇怪的是,我无法从我的其他解决方案中访问ApplicationDbContext的数据库设置,我已经在相同的解决方案中完成了这项工作。 – JonnyKnottsvill

+0

这是错的。您应该为每个项目创建一个DAL,并且只是从一个项目到另一个项目进行通信。 – Kram

回答

2

我认为你的困惑源于不知道连接字符串应该从哪里来。连接字符串是正在运行的程序集提供的依赖项。两个MVC项目都有自己的web.config文件,这两个文件都应该有连接字符串到您的数据库。第二个项目不能使用第一个项目的连接字符串。尽管如此,如果在两个应用程序中使用完全相同的数据层(不管使用哪种类型的应用程序),最好制作一个包含DbContext以及类和映射的单独程序集。同样,运行时使用的连接字符串不在此项目中,但在每个使用数据层的单独应用程序的配置文件中。

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

​​
+0

感谢您的答复。我明白。我有我的第二个解决方案中的连接字符串,但是我通常的方式确保这是使用的连接字符串(如我的问题)不会在我的第二个解决方案中工作。我不知道命名约定。我的上下文类使用DefaultConnection作为应用程序设置中的连接字符串,所以我将其命名为它可以找到它。对不起,因为我对自己的解决方案缺乏认识,所以我继承了这一点,所以有些宝石还没有得到解决。 – JonnyKnottsvill

0

这里有几个选项:

1,更改您的控制器的ApiController并通过的WebAPI消耗你的数据;

2-将您的映射移动到类库,并将这个类库添加到这两个解决方案:mvc应用程序和其他项目。

+0

在2-你指的是将ApplicationDbContext放在不同的项目中?这会帮助我在解决方案之外访问它吗? ApiController是一个不错的选择,因为它灵活且不会太麻烦,但最好能够扩展解决方案2的功能,而不必经常修改解决方案1的ApiController。解决方案2与Db的交流可能会相当多变,并且会经常延长。 – JonnyKnottsvill

+0

是的,你只需要在两个解决方案中共享连接字符串。 –

+0

假设两个应用程序都可以遵循相同的发布时间表,第二个选项更容易维护。如果他们不这样做,那么他们可能会做得更好,因为构建Web服务只是为了公开您的数据(无论如何,这是一个坏主意;构建公开业务用例的服务器,而不是围绕数据库的简单包装)是方式更昂贵。 – Andy

相关问题