C# 如果实体处于关系中,EF中的CommunicationException

C# 如果实体处于关系中,EF中的CommunicationException,c#,vb.net,wcf,entity-framework,service,C#,Vb.net,Wcf,Entity Framework,Service,我的数据库中有两个表(为了本例)。 产品和图像。他们是一对多的关系。关系是通过数据库中的外键完成的 我基于数据库生成了一个EF.edmx文件,一切正常。 我唯一的一个问题是,这个.edmx在WCF项目中,如果我返回一个产品对象,我会在客户端得到以下异常: 接收对的HTTP响应时出错。这可能是由于服务端点绑定未使用HTTP协议造成的。这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。” 如果我删除关系,WCF服务的一切都正常,除了.edmx不允许我

我的数据库中有两个表(为了本例)。 产品和图像。他们是一对多的关系。关系是通过数据库中的外键完成的 我基于数据库生成了一个EF.edmx文件,一切正常。 我唯一的一个问题是,这个.edmx在WCF项目中,如果我返回一个产品对象,我会在客户端得到以下异常:

接收对的HTTP响应时出错。这可能是由于服务端点绑定未使用HTTP协议造成的。这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。”

如果我删除关系,WCF服务的一切都正常,除了.edmx不允许我映射关系,因为DB中有一个必须映射的FK键约束。如果我删除了所有的功能,但我不想到处删除数据库中的每个FK键,因为那样我就会回到LINQ-TO-SQL,这比EF更糟糕

我想我在做一些非常愚蠢的事情。请告知

(我的代码不确定您是否需要它,我认为这与VB.NET无关)

客户端:

Dim db作为新服务引用1.SynchServiceClient

Dim prod=db.GetProductById(“,”,40)

您的数据协定可能无法完全序列化。你试过调试这个服务吗?我怎么知道它是否完全可序列化?不要从EF模型返回整个类。创建一些数据传输对象(DTO)并只返回您需要的内容。
Function GetProductById(username As String, pass As String, productid As Integer) 
    As Product Implements SynchService.GetProductById
    If ValidateLogin(username, pass) Then
        Using db As New GaranciaEntities
            Try
                Dim prod = db.Products.Where(Function(n) n.ProductID = productid)
                             .First
                Return prod
            Catch ex As Exception
                Return Nothing
            End Try
        End Using
    Else
        Return Nothing
    End If
End Function