方法WCF无法识别参数实体框架

时间:2013-10-09 13:37:55

标签: sql-server wcf entity-framework parameters edmx-designer

当drupal应用程序正在使用我们继承的WCF服务时,它会发送一个xml,该xml应该生成一个实体框架参数。在一些模式更改之后,我们更新了实体框架模型(edmx文件)。问题是当客户端调用服务(使用与以前相同的代码)时,usageritem参数未正确反序列化。 发送给该方法的调用如下:

<UpdateUsager xmlns="http://tempuri.org/">
<usageritem xmlns:a="http://schemas.datacontract.org/2004/07/CNVGestion.Domain" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1">
<EntityKey xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" i:nil="true"/><a:ADR1>7 rue Diffonty</a:ADR1>  ....

接收此调用的方法具有以下标题:

 public string UpdateUsager(fUsagerItem usageritem, bool checkonly){

声明实体的edmx具有以下标题

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
    <Schema Namespace="FRONT.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">

我想知道在使用sql server 2005之前生成这个edmx的事实之间是否存在问题,我们现在使用sql server 2012来更新它,我们只更改了ProviderManifestToken =“2005”.. 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您的问题有点含糊不清 - 在输入您的方法之前对您的服务的调用是否失败,或者,如果不是,您是指该参数为null还是其某些属性为空?

如果是后者,我只能猜测从数据库更新Entity Framework模型,更改了fUsagerItem类中的属性顺序。您可以手动检查服务的WSDL引用的.xsd文件,并查看WCF如何期望XML。使用[DataMember(Order = ?)]属性更改属性的序列化顺序,但您必须将它们放在设计器生成的类中(这是个坏主意)。

通常认为您不应该直接在Web服务中使用实体框架对象,尤其是当您从其他框架(如PHP)使用服务时。创建自己的数据传输对象时,您可以更好地控制序列化过程:您可以隐藏某些属性或引入数据库中不存在的新属性。如果你可以说服你的客户改变他们的实现,我建议你在服务中使用DTO类(AutoMapper可以帮助很多人将DTO对象映射到实体,反之亦然)。