2012-02-14 118 views
2

我正在开发一个应用程序,它将客户端数据隔离到MS SQL Server 2008中的不同架构中。每个架构的表结构都是相同的。 Entity Framework 4.1将用于访问数据,每个客户端使用不同的连接字符串。连接字符串中的用户设置为使用数据库中的特定模式,这不是问题。实体框架更改每个连接的架构名称

我遇到的问题是查询中的模式名称在EDMX中硬编码。如果我从.edmx中的每个实体中删除模式名称,那么.NET将使用EntityContainer名称。如何才能改变每个连接的模式名称? 我正在使用通用的DbContext来为每个请求提供的连接字符串进行连接。

我试过了codeplex上的布兰登海恩斯EF ModelAdapter,但这似乎不适用于最新版本的EF。任何帮助表示赞赏!

回答

2

用EDMX + DbContext解决这个问题可能会很困难,因为唯一的方法是为每个模式分别建立SSDL。 SSDL是EDMX文件的一部分,它是定义所有表格的部分,包括其模式的名称。您可以在运行时更改SSDL(默认情况下,XML是存储为程序集资源的XML),但您必须为每个模式手动创建MetadataWorkspace,使用它创建EntityConnection并将连接传递给上下文构造函数。如果你想使用它,你将不得不使用ObjectContext API(.NET 4.0)而不是DbContext API。

如果您转移到代码映射(没有EDMX,但流畅的API用于描述映射),将可能实现它,因为您将能够参数化您的单个映射集并使用多个DbModel实例(每个模式一个)。