.net - Entity Framework 更改每个连接的架构名称

标签 .net entity-framework

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

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

我尝试过布兰登·海恩斯 EF ModelAdapter在 codeplex 上,但这似乎不适用于最新版本的 EF。如有任何帮助,我们将不胜感激!

最佳答案

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

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

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

关于.net - Entity Framework 更改每个连接的架构名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280907/

相关文章:

c# - EF Code First DbContext 仅为集合的第一个元素返回封装的实体

c# - 如何使用 Entity Framework 对 LocalDB 表进行 RESEED?

c# - .Net 4.5.2 升级后尝试解密数据时出现 HttpException

.net - 恒定时间比较

.net - 无法以编程方式展开分配给 TreeView 的 TreeNode

asp.net-mvc - 带有继承的 MVC 5 脚手架使用了错误的实体集

c# - Moq.Mock<T> 使用 MOQ 将表达式设置为 Mock 会导致模拟设置不匹配

c# - Silverlight 4 中的排序集合类?

c# - 持有线程的类的 IDisposable 实现

c# - 如何在 C# 中访问泛型类型的元素