代码之家  ›  专栏  ›  技术社区  ›  John Farrell

有没有可能有多个带有共享连接字符串的实体框架edmx?

  •  1
  • John Farrell  · 技术社区  · 15 年前

    我的概念是在一个项目中定义具有相应映射类型的日志记录/审计EDMX文件。此EDMX具有AuditTrail和PropertyChange等概念和类

    第二个EDMX用于实际的应用程序模型、域(如果您愿意的话),包括产品、类别和订单等类。

    我要做的是“收集”第一个审核EDMX文件到第二个域EDMX。模式信息是100%相同的,数据库有来自这两者的表。

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

    我一直在东张西望,这似乎是有可能的,我只是错过了一些实现细节,而这些细节并没有将其结合在一起。

    这应该和将域edxm和objectcontext连接字符串指向审核edmx的csdl、ssdl和msl文件一样简单?目标是将所有元数据信息加载到一个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 回复  |  直到 15 年前
        1
  •  3
  •   Alex James    15 年前

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

    回到CSDL,有一个很少使用的 <using> CSDL中的元素。这可能让人觉得它类似于.NET中的引用,但实际上更像是合并。

    也就是说,另一个CSDL中的一个CSDL实际上修改了两者,将它们合并在一起,并可能通过使它们不完整而使MSL和SSDL失效。

    回到你的场景:

    理论上你可以有两个CSDLs: 1)描述审计类型 2)使用(1)定义域类型,并为这两种类型定义EntitySet和AssociationSet。

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

    这会给你留下这样的东西:

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

    就个人而言,虽然我认为您从这一分离中获得的收益不足以使它值得,但大多数元数据都在范围内,不管怎样,映射和存储模型,因此键入re use while nice只是工作的20%。

    您真正可以重用的只是审计类型定义,但这可能不值得您这么做。

    希望这有帮助

    亚历克斯·詹姆斯

    微软。