有了实体框架,我可以说,在相当高的堆栈设置哪个数据库我想连接到,然后让EF使用它的所有查询?实体框架4是否支持多数据库?
这不是每个模型都有不同数据库的场景,而是所有模型都连接到同一个数据库,但根据某些条件(例如URL或子域),此数据库可能会有所不同, 。
如果是的话,这会对数据库池等产生什么影响?
有了实体框架,我可以说,在相当高的堆栈设置哪个数据库我想连接到,然后让EF使用它的所有查询?实体框架4是否支持多数据库?
这不是每个模型都有不同数据库的场景,而是所有模型都连接到同一个数据库,但根据某些条件(例如URL或子域),此数据库可能会有所不同, 。
如果是的话,这会对数据库池等产生什么影响?
是的,你可以做到这一点。这只是在创建ObjectContext时使用适当的连接字符串,它将您连接到要使用的数据库。我们经常这样做。
但我假设完全相同的数据库(-schema),而不是从MS-SQL切换到oracle? –
正确。提供程序在编译到程序集的SSDL中指定。如果您想要执行此切换,可以将edmx编译操作更改为复制到输出文件夹,然后手动切换ssdl以在运行时使用不同的提供程序。更多这里http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Jeff
每次使用DbContext
时,只需在执行任何查询之前更改connectionString即可。
例如,你可以简单地改变初始目录名称:
YourDbContext.Database.Connection.ConnectionString = "data source=LAPKEVIN\\SQLKEVIN;Integrated Security=SSPI;Initial Catalog=YourDatabase";
是ObjectContext的东西是一个动作触发之前全局设置,然后关闭?即每次请求我可以这样做吗? – codecompleting
那么,不应该跨线程共享对象上下文,并且通常应该具有较短的生命周期(每个工作单元)......然后将其丢弃。所以,是的,它是(连接字符串),可以为每次创建ObjectContext时改变。 – Jeff
因此创建它并销毁它,并且页面请求的开始/结束是安全的,那么对吗?最佳实践? (如在执行动作之前/之后的MVC中) – codecompleting