WCF DataServices (CTP2): existe uma incompatibilidade de tipo entre o cliente e o serviço
Estou usando o WCTP Dataservices CTP2 com o Entity Framework 4.1. Agora, estou tentando obter dados através do meu datacontext. Recebo esta exceção:
System.Reflection.TargetInvocationException: a exceção foi lançada pelo destino de uma chamada. ---> System.InvalidOperationException: existe uma incompatibilidade de tipo entre o cliente e o serviço. O tipo 'Crm.Objects.Segmentation' não é um tipo de entidade, mas o tipo na carga útil da resposta representa um tipo de entidade. Verifique se os tipos definidos no cliente correspondem ao modelo de dados do serviço ou atualize a referência de serviço no client at System.Data.Services.Client.AtomMaterializer.MaterializeResolvedEntry (entrada AtomEntry, Boolean includeLinks) em System.Data.Services.Client.AtomMaterializer.Materialize (entrada AtomEntry, Tipo expectEntryType, Boolean includeLinks) em System.Data.Services.Client .AtomMaterializer.DirectMaterializePlan (materializador AtomMaterializer, entrada AtomEntry, digite expectableEntryType) em System.Data.Services.Client.AtomMaterializerInvoker.DirectMaterializePlan (materializador de objeto, entrada de objeto, tipo expectávelEntryType) em System.Data.Services.unit materializer, entrada AtomEntry, digite expectableType) em System.Data.Services.Client.AtomMaterializer.Read () em System.Data.Services.Client.MaterializeAtom.MoveNextInternal () em System.Data.Services.Client.MaterializeAtom.MoveNext () em System.Linq.Enumerable.d_ b11.MoveNext() at System.Collections.Generic.List
1..ctor (IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) em MangoCrm.Modules.Replication.ReplicaBuilder.GetItems [T] (consulta IEnumerable`1) em MangoCrm.Modules.Replication.ReplicaBuilder.BeginReplication () em MangoCrm.Modules.Replication.ReplicationWindowControl.b _0 () --- Fim do rastreamento da pilha de exceção interna --- em System.RuntimeMethodHandle._InvokeMethodFast (método IRuntimeMethodInfo, Object target, argumentos Object [], SignatureStruct & sig, MethodAttributes methodAttributes, MethodAttributes methodAttributes, RuntimeType typeOwner) em System.RuntimeMethodHandle.InvokeMethod Método IRuntimeMethodInfo, Destino do objeto, Argumentos do objeto [], Assinatura da assinatura, MethodAttributes methodAttributes, RuntimeType typeOwner) em System.Reflection.RuntimeMethodInfo.Invoke (Objeto do objeto, BindingFlags invokeAttr, Fichário do encadernador, Fichário do fichário, Parâmetros do objeto [], Parâmetros do objeto [], Cultura do CultureInfo, Booleano skipVisibilityCheck) System.Delegate.DynamicInvokeImpl (Object [] args) em System.Windows.Threading.ExceptionWrapper.InternalRealCall (retorno de chamada do delegado, args de objeto, args de Int32) - MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (origem do objeto, método Delegate, método Object) , Int32 numArgs, Delegar catchHandler)
aqui está o meu código:
var uri = new Uri(webServiceUrl);
var service = new DataServiceContext(uri);
MessageBox.Show(service.CreateQuery<Segmentation>("DbSegmentations").ToList().Count.ToString());
Qualquer ajuda
ATUALIZA ok agora descobri que minha resposta do WCF contém um objeto de entidade modificado. Aqui está
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<entry xml:base="http://localhost:99/Services/CrmDataService.svc/"
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
xmlns="http://www.w3.org/2005/Atom">
<id>http://localhost:99/Services/CrmDataService.svc/DbSegmentations(guid'e9854210-85d1-4822-ba70-7e1d3d29cf62')</id>
<title type="text"></title>
<updated>2011-06-16T15:07:48Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Segmentation" href="DbSegmentations(guid'e9854210-85d1-4822-ba70-7e1d3d29cf62')" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Companies"
type="application/atom+xml;type=feed"
title="Companies"
href="DbSegmentations(guid'e9854210-85d1-4822-ba70-7e1d3d29cf62')/Companies" />
<category term="Crm.Data.Segmentation" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:Id m:type="Edm.Guid">e9854210-85d1-4822-ba70-7e1d3d29cf62</d:Id>
<d:Name>Promoter</d:Name>
<d:Description m:null="true" />
<d:ReplicaInfo m:type="Crm.Data.ReplicaInfo">
<d:CreateDate m:type="Edm.DateTime">2011-06-09T20:35:22.29</d:CreateDate>
<d:ModifyDate m:type="Edm.DateTime">2011-06-09T20:35:22.29</d:ModifyDate>
<d:CreatedById m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:CreatedById>
<d:ModifiedById m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:ModifiedById>
<d:IsDeleted m:type="Edm.Boolean">false</d:IsDeleted>
</d:ReplicaInfo>
</m:properties>
</content>
</entry>
Aqui está um problema
<category
term="Crm.Data.Segmentation"
scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"
/>
A pergunta é por que meu Crm.Objects.Segmentation se tornou Crm.Data.Segmentation? Ho para mudar de volta?
UPDATE2 Acho que o problema está no meu contexto de dados. O contexto de dados possui um espaço para nome Crm.Data. Minhas entidades estão em Crm.Objects. Em seguida, eu uso o 4.0.0 WCF, tudo está bem, mas depois eu alterno para o CTP2, minhas entidades obtêm o namespace Crm.Data em vez de um Crm.Objects @ corret