我正在开发一个应用程序,它将客户端数据分离到MS SQL Server 2008中的不同模式。每个模式的表结构都是相同的。 Entity Framework 4.1将用于访问数据,每个客户端使用不同的连接字符串。连接字符串中的用户被设置为使用数据库中的特定模式,这不是问题。
我遇到的问题是查询中的模式名称是在EDMX中硬编码的。如果我从.edmx中的每个实体中删除模式名称,那么.NET将使用EntityContainer名称。如何在每个连接上更改此模式名称? 我正在使用通用DbContext来连接每个请求提供的连接字符串。
我在codeplex上尝试过Brandon Haynes EF ModelAdapter,但这似乎不适用于最新版本的EF。任何帮助表示赞赏!
答案 0 :(得分:2)
使用EDMX + DbContext
解决这个问题可能很难,因为唯一的方法是为每个模式分别设置SSDL。 SSDL是EDMX文件的一部分,它是定义所有表的部分,包括其模式的名称。您可以在运行时更改SSDL(默认情况下只将XML存储为程序集的资源),但您必须为每个模式手动创建MetadataWorkspace
,使用它来创建EntityConnection
并将连接传递给上下文构造
EF ModelAdapter基于ObjectContext
,因此如果要使用它,则必须使用ObjectContext API(.NET 4.0)而不是DbContext API。
如果您转向代码映射(没有EDMX,但用于描述映射的流畅API),则可以实现它,因为您将能够参数化单个映射集并使用多个DbModel
实例(每个模式)。