如何在这个复杂的设置中配置实体框架连接

时间:2013-03-02 20:02:55

标签: entity-framework asp.net-mvc-4 code-first

假设您有一个Web应用程序,并且您为50个州中的每个州运行相同的代码库。由于存储数据的合法性,每个州必须拥有自己独立的数据库,即使它们的名称和实际数据除外。将应用程序保留在单个代码库中。您在Web服务器上有50个应用程序实例,每个实例在其web.config中都有不同的连接字符串。

然后,您希望首先使用EF 5代码与migraitons。 我希望EF 5使用1个指定的连接字符串。到现有的数据库。我不希望我的模型中的每个对象都有一个连接字符串。像...

<add name="ProductsContext" connectionString=".....
<add name="UsersContext" connectionString=".....
<add name="LocationsContext" connectionString=".....

我希望有一个连接字符串,如

<add name="DefaultConnection" connectionString=".....

我该怎么做?

此外,如果我的模型中的每个对象都需要成为dbcontext的一部分,那么最好将它们放在单独的上下文中,比如教程显示,或者可以/它们是否应该在同一个上面,这样我就可以使用“默认”语境”。你应该有多少背景?

如果我让EF使用连接工厂并创建3个上下文,它会尝试创建3个数据库。

注意我无法以编程方式指定连接,因为应用程序的每个副本都连接到不同名称的数据库。

我真的很担心EF想要为我的模型中的每个对象创建数据库。此外,如果他们有一个方法可以拥有1个代码库,可以访问50个独立的数据库,并且知道哪个数据库在启动时没有任何用户交互也会有所帮助。当前使用具有不同web-config文件的相同代码的单独托管实例时,在更新Web服务器上的代码时需要进行维护。

建议?解决方案?最佳做法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您定义的每个上下文类都会创建一个新模型,在绝大多数情况下,您只需要1个模型,因此每个应用程序需要1个上下文类。此外,如果在不同上下文中的实体之间存在导航属性,则它们将无法按预期工作。 这样,每个web.config文件中只需要一行来指定连接字符串。

请参阅本教程,了解如何使用多种实体类型创建模型:http://msdn.microsoft.com/en-us/data/jj193542