2011-07-12 58 views
2

有了实体框架,我可以说,在相当高的堆栈设置哪个数据库我想连接到,然后让EF使用它的所有查询?实体框架4是否支持多数据库?

这不是每个模型都有不同数据库的场景,而是所有模型都连接到同一个数据库,但根据某些条件(例如URL或子域),此数据库可能会有所不同, 。

如果是的话,这会对数据库池等产生什么影响?

回答

1

当您创建的ObjectContext,为构造函数的参数是连接字符串:

http://msdn.microsoft.com/en-us/library/bb739017.aspx

应该有上池并无影响。

+0

是ObjectContext的东西是一个动作触发之前全局设置,然后关闭?即每次请求我可以这样做吗? – codecompleting

+0

那么,不应该跨线程共享对象上下文,并且通常应该具有较短的生命周期(每个工作单元)......然后将其丢弃。所以,是的,它是(连接字符串),可以为每次创建ObjectContext时改变。 – Jeff

+0

因此创建它并销毁它,并且页面请求的开始/结束是安全的,那么对吗?最佳实践? (如在执行动作之前/之后的MVC中) – codecompleting

1

是的,你可以做到这一点。这只是在创建ObjectContext时使用适当的连接字符串,它将您连接到要使用的数据库。我们经常这样做。

+0

但我假设完全相同的数据库(-schema),而不是从MS-SQL切换到oracle? –

+2

正确。提供程序在编译到程序集的SSDL中指定。如果您想要执行此切换,可以将edmx编译操作更改为复制到输出文件夹,然后手动切换ssdl以在运行时使用不同的提供程序。更多这里http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Jeff

1

每次使用DbContext时,只需在执行任何查询之前更改connectionString即可。

例如,你可以简单地改变初始目录名称:

YourDbContext.Database.Connection.ConnectionString = "data source=LAPKEVIN\\SQLKEVIN;Integrated Security=SSPI;Initial Catalog=YourDatabase";