Я получил эту ошибку, когда внедряю STE в EF4 и WCF
"Не удалось найти сопоставление объектов для типа с идентификатором 'NorthwindModel.Customer'."
если я не использую STE (в одном проекте), этот код работает.
Пошаговое руководство. Сериализация самопроверкаемых объектов
Вот мой код
WCF:
Public Class Service1
Implements IService1
Public Function GetData(ByVal query As String) As List(Of DbDataRecord) Implements IService1.GetData
Try
Using ctx = New NorthwindEntities()
Return New ObjectQuery(Of DbDataRecord)(query, ctx).ToList 'Here is the error.
End Using
Catch ex As Exception
Dim theFault As New ServFault()
theFault.Reason = ex.Message.ToString()
Throw New FaultException(Of ServFault)(theFault, ex.Message.ToString)
End Try
End Function
Public Function GetOrderByCustomer(customerId As String) As System.Collections.Generic.List(Of Entities.Order) Implements IService1.GetOrderByCustomer
Try
Using ctx = New NorthwindEntities()
Return (From ord In ctx.Orders Where ord.CustomerID = customerId).ToList
End Using
Catch ex As Exception
Dim theFault As New ServFault()
theFault.Reason = ex.Message.ToString()
Throw New FaultException(Of ServFault)(theFault, ex.Message.ToString)
End Try
End Function
End Class
WCF Config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<connectionStrings>
<add name="NorthwindEntities" connectionString="metadata=res://*/NWDModel.csdl|res://*/NWDModel.ssdl|res://*/NWDModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=Northwind;persist security info=True;user id=sa;password=145837;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Клиент WCF:
Module Module1
Sub Main()
Dim srv As New Service1Client
Dim query As String
Dim lst As List(Of DbDataRecord)
Console.WriteLine("Start...")
Dim orders As List(Of Entities.Order)
orders = srv.GetOrderByCustomer("ALFKI") 'This code is working
Console.WriteLine("Success!!! Order Count: {0}", orders.Count)
query = "SELECT p FROM Customers AS p"
lst = srv.GetData(query)
Console.WriteLine("Total Customer: {0}", lst.Count)
srv.Close()
Console.ReadLine()
End Sub
End Module
Надеюсь, кто-нибудь может мне помочь. Полный источник для вышеупомянутого образца также доступен, если вам это нужно