【问题标题】:Load Child Entities with EntityFramework in WCF在 WCF 中使用 EntityFramework 加载子实体
【发布时间】:2020-03-01 16:19:23
【问题描述】:

以下代码是一个 WCF 项目。 我正在使用 EntityFramekwork (v.6) 加载表的子数据。 如下代码。

这是存储库中的代码。

public IEnumerable<Messages> GetMessagesList()
{
    return context.Messages.Include(e=>e.Users).Include(e=>e.Codes).ToList();
}

这是服务中的代码:

public IEnumerable<Messages> GetMessagesList()
{
   var res =  messagesRepository.GetMessagesList();
   return res;
}

无论有无 include 方法,它都会在调试时返回数据。

但问题是当我添加 include 方法以在我的客户端中加载相关的子实体时。当我只加载 Messages Entity 时就可以了。

接收到的 HTTP 响应时出错 http://localhost:2341/DataService.svc。这可能是由于 服务端点绑定不使用 HTTP 协议。这也可以 是由于服务器中止了 HTTP 请求上下文 (可能是由于服务关闭)。查看服务器日志了解更多信息 详情。

内部异常消息:

底层连接已关闭:发生意外错误 一个接收。

使用 WCF TEST CLIENT 进行测试时:

问题实际上出在哪里,如何将带有子级的消息实体传递给客户端而不会出现错误。错误很笼统,无法理解实际问题。

【问题讨论】:

  • 您似乎正试图从服务中返回实体对象。这是不可能的,因为默认情况下 Entity 对象不能是 Serializable 。所以你不能直接从服务中返回。您可以将您的实体映射到 DTO 而不是返回它。检查wcf-entity-framework-data-contracts

标签: c# entity-framework wcf


【解决方案1】:

我将 [DataContract(IsReference = true)] 添加到模型类中,并且子表中的所有相关数据都通过预加载加载。这就是这种情况下的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多