代码之家  ›  专栏  ›  技术社区  ›  taudep

使用ADO.NET实体对象和基于SOAP的Web服务

  •  1
  • taudep  · 技术社区  · 15 年前

    我正在构建一个传统的ASP.NET Web服务——使用asmx构建的样式。服务很简单。我开始为我的持久层使用新的ADO.NET实体框架,我遇到了一些问题:

    1)我不喜欢自动生成的WSDL——复杂类型的定义如下:

       <s:complexType name="TestObject">
          <s:complexContent mixed="false">
             <s:extension base="tns:EntityObject"> ...
    

    因此,我构建了自己的WSDL,并使用wsdl.exe工具创建了一个服务定义,其中包括一个新的类型定义,所以现在WSDL看起来像,我觉得它是一个更跨平台的设计:

    <xsd:complexType name="TestObject">
      <xsd:sequence>
        <xsd:element minOccurs="0" name="created" type="xsd:dateTime"/> ...
    

    我现在让ASPX生成一个不错的WSDL文件。但现在我不知道该把这个带到哪里去。对于测试对象,我有两种基本相同的类型: 1)用于ADO.NET实体框架的实体持久性 2)以及用于定义跨线数据的。

    我想知道如何将它们组合成一个。我对修改由ADO.NET实体框架自动生成的.cs文件有点紧张,因为它看起来可能会被改写。

    任何有ADO.NET实体经验的人都认为它值得使用?虽然我喜欢这样一个想法,即我能够以多快的速度建立对数据层的持久性,但我需要以一种非常定制的方式定义实体对象是如何跨线传输的,因此我需要修改与它的属性相关联的属性。另外,在我的服务实现中,我不希望通过从EntityFramework.TestObject转换为wsdlDefinition.TestObject。

    谢谢你的意见。

    2 回复  |  直到 15 年前
        1
  •  1
  •   RobS    15 年前

    当我们试图在SOA风格的体系结构中使用实体框架时,您面临的是我们中许多人所面临的那种墙。

    在您所描述的场景中,实体框架的1.0版工作得不太好,因为您最终在管理对象上下文时遇到了麻烦(而且很可能 必须缓存它们)。

    我建议全面阅读以下内容(1) article 由EF团队发布关于实体框架未来的信息。它还具有捕获和讨论当前一些不足之处的效果。

    简言之,我不确定实体框架是否完全是您现在想要的解决方案,因为在这个阶段,在跨线(或服务边界之外)处理EF实体时没有“干净”的解决方案。

    其他人可能会求同存异…

    p.s您对手工编辑生成的代码持谨慎态度是正确的——对数据模型的任何更新都将覆盖任何修改(尽管您可以在部分类中对其进行扩展)。但是,如果要向属性添加属性,则没有帮助。

    (a) http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx

        2
  •  0
  •   taudep    15 年前

    谢谢。这是我怀疑的,但我不想花一整天的时间研究。目前我要做的是保持对象独立,这样我就可以保持干净的WSDL,然后在数据访问层中,我将在Wire和ADO.NET实体框架上的对象之间进行转换。

    可能不是最合理的方法,但这将使我在演示时受益匪浅。

    感谢本文的链接,我认为我遗漏的关键概念是持续的无知。我已经研究了Java Web服务,在那里可以定义波霍(普通的Java对象),并且很容易地通过有线传输它们,并坚持到数据源…

    …现在我明白了你为什么建议wcf,因为它支持持续的无知。