每个连接的实体框架更改架构名称

时间:2012-02-14 16:56:13

标签: .net entity-framework

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

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

我在codeplex上尝试过Brandon Haynes EF ModelAdapter,但这似乎不适用于最新版本的EF。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

使用EDMX + DbContext解决这个问题可能很难,因为唯一的方法是为每个模式分别设置SSDL。 SSDL是EDMX文件的一部分,它是定义所有表的部分,包括其模式的名称。您可以在运行时更改SSDL(默认情况下只将XML存储为程序集的资源),但您必须为每个模式手动创建MetadataWorkspace,使用它来创建EntityConnection并将连接传递给上下文构造

EF ModelAdapter基于ObjectContext,因此如果要使用它,则必须使用ObjectContext API(.NET 4.0)而不是DbContext API。

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