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