是否可以将多个Entity Framework edmx与共享连接字符串一起使用?

时间:2009-12-07 05:06:56

标签: entity-framework

我的概念是在一个项目中定义一个日志/审计edmx文件,其中包含相应的映射类型。这个edmx有一些概念和类,如AuditTrail和PropertyChange

实际应用程序模型的第二个edmx,如果愿意,可以使用Product,Category和Order等类。

我想要做的是将第一个审核edmx文件“挖出”到第二个域edmx中。架构信息是100%相同,数据库有两个表。

我想要发生的是,这两个edmx文件以这样的方式组合,即我可以使用事务来保存数据,例如两者都依赖于彼此的完成。没有我的域信息,我的审核信息无法保存,反之亦然。

我一直在徘徊,这似乎有可能我只是遗漏了一些没有将它们整合在一起的实现细节。

这应该像将域edxm和objectcontext连接字符串指向审计edmx的csdl,ssdl和msl文件一样简单吗?目标是将所有MetaData信息加载到ObjectContext的单个实例中,这样我就可以用事务包装对两者的调用。

这就是我在此应用程序的Web应用程序/域部分的连接字符串中所拥有的内容:

                      connectionString="metadata=res://*/Models.CfarModels.csdl|
                                                 res://*/Models.CfarModels.ssdl|
                                                 res://*/Models.CfarModels.msl|
                                                 W:\map\AuditModels.csdl|
                                                 W:\map\AuditModels.ssdl|
                                                 W:\map\AuditModels.msl;

我在正确的轨道上这是不可能的吗?

1 个答案:

答案 0 :(得分:3)

虽然可以将多个CSDL文件加载到一个(实体)连接中,但是无法加载多个MSL或SSDL文件,因为这些文件是完全独立的。

回到CSDL,CSDL中很少使用<using>元素。这可能会给人一种类似于.NET中的Reference的印象,但实际上它更像是一个Merge。

即。另一个CSDL实际上修改了它们,将它们合并在一起,并且可能使它们不完整而使MSL和SSDL无效。

回到你的场景:

理论上你可以有2个CSDL: 1)描述审计类型 2)使用(1)&amp;定义域类型并为两种类型定义EntitySets和AssociationSets。

然后,您将有一个映射文件来映射(2)和存储模型文件。

哪会让你有这样的事情:

"metadata=res://*/Models.CfarModels.csdl|
          res://*/Models.CfarModels.ssdl|
          res://*/Models.CfarModels.msl|
          W:\map\AuditModel.csdl;

就个人而言,虽然我认为你从这种分离中获得足够的收益并不值得,但大多数元数据仍然在范围,映射和存储模型中,所以类型重用,而好的只有大约20%无论如何,这项工作。

您可以真正重用的是审计类型定义,但这可能不值得付出努力。

希望这有帮助

亚历克斯詹姆斯

微软。