我的概念是在一个项目中定义一个日志/审计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;
我在正确的轨道上这是不可能的吗?
答案 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%无论如何,这项工作。
您可以真正重用的是审计类型定义,但这可能不值得付出努力。
希望这有帮助
亚历克斯詹姆斯微软。