2

该场景基本上是我需要一个域模型用于我的程序,但要连接包含ofcourse不同模式的不同供应商数据库。如何使用实体框架更改模式数据库

是否可以手动更改xml SSDL文件?也许最好为每个供应商数据库创建一个数据实体模型,并创建类似模块的应用程序配置选项?再次,我会需要在我的应用程序内的特定pocos管理,而不是每次都不一样。这让我想到了创建一个图层以将EF实体的属性复制到我的poco对象的可能解决方案。

您的反馈是宝贵的!

Thanx

回答

2

这是奇怪的要求。您正在构建应该适用于某些预期数据结构的应用程序,但同时您希望存储的数据结构对于每个部署都不同?

可以创建多个版本的SSDL and load MSL, SSDL and CSDL from files而不是资源,但是如果您在SSDL中更改表名或列名,则还必须修改MSL,因为它描述了SSDL中定义的表与CSDL中定义的实体之间的映射。每个客户端执行此操作可能会成为维护噩梦,因为您必须为每个客户端使用一个EDMX(每个客户端也使用新的CSDL),或者手动修改SSDL和MSL的XML。如果您使用POCO,则不必担心多个映射,因为如果您的CSDL对实体和列使用的名称仍然相同,则它将起作用。

如果你的模块需要在客户端数据库中不需要的表,那么你可以简单地添加一个隐藏相关功能的配置(或者在意外使用功能时抛出异常),但是你的SSDL仍然会模仿桌子是存在的。否则,你真的必须创建多个EDMX - 无论是由模块或客户端。

将应用程序分成模块对设计有另一个影响。如果您使用单个EDMX,您仍然必须确保实体之间不存在导航属性,只能通过安装一些模块来打破这些导航属性。>不能为可选模块的实体导航属性。如果您为每个模块创建EDMX,除了某些共享的重用EDMX之外,根本不能有交叉模块导航属性。

我认为应用程序部署过程的一部分应该是为应用程序创建可更新的视图。这会将未知架构映射到预期架构,以便您仍然使用单个SSDL。我没有尝试过,但我希望它能工作。

+0

Thanx的答复,我认为它会更好地保持每个客户端使用EDMX模块的情况下,如果我可以应用相同的POCO程序集到每个模型!不知道如果这可以工作!我想最大的问题是具有导航属性的问题。我会研究这些案例。 – 2011-04-11 08:52:30

相关问题