c# - 如何使用 EF+Web API 处理深层对象?

标签 c# entity-framework asp.net-web-api2

这是我在这里的第一个问题,所以要温和。

我有一个数据库模型,该模型由大约 60 个对象组成,这些对象描述了工业过程的信息和各种特征。最终结果约为。 10 级深度对象。

我的本​​意是

  • 以 JSON 格式向客户端发送顶级对象
  • 双向绑定(bind)所述对象(在角度上,但 nvm 那个)并操纵它
  • 使客户端的 AJAX 调用引用该顶级对象
  • 通过 Web API 中的一两个构造函数调用重建所述对象
  • 更改对象并通过顶级对象方法保存更改

我的解决方案是在 EF 对象的基础上创建一个额外的对象层,以允许在发送给客户端的对象中随意省略/添加数据,避免循环引用问题和其他由 eager 引起的问题/延迟加载。这些对象被提供给 Web API。

现在麻烦开始了: 作为附加层的结果,每当在链下保存 EF 对象中的更改时,都需要从附加层重建 EF 对象。跟上所有这一切变得越来越困难。

对象是高度互连和约束的。我应该只为 EF 对象编写扩展来模拟附加层的功能吗? 如果是这样的话,JavaScriptSerializer 不会尝试序列化所有关系中的所有对象(序列化对象的键在另一个对象中定义为 FK)吗?因为这是我从错误消息中收集到的信息。

还是我做错了?

最佳答案

在像您这样的断开连接的应用程序中,我将删除所有 导航属性。起初它们可能看起来很方便,但一路上会让人头疼。

我相信通过 Id 访问所有实体是可行的方法。
您可以编写一个JavaScript 类,它负责接收 每个Id 实体,因此可以缓存它们。
因此,每次您在客户端需要一个实体 时,您都可以通过此类获得它。

这将导致每个实体都有一个 Controller 。

另一个优点是您不必总是发送和接收整个对象图,这看起来数据很多(10 层深很多)。


won't the JavaScriptSerializer try to serialize all the objects in all of the relationships

是的,会的。这就是为什么具有导航属性的对象(尤其是圆形对象)很难序列化的原因之一。

关于c# - 如何使用 EF+Web API 处理深层对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34828069/

相关文章:

c# - 如何创建一个保持在应用程序前台的 C# Windows 窗体

wcf - Entity Framework ,多个 edmx 共享连接字符串 - 可能吗?

entity-framework - EF 代码第一个无效的列名 "CategoryCategoryID"

c# - 查询参数路由约束

angularjs - Angular2 - HTTP 200 被视为错误

iis - 约束委派 (Kerberos) 仅使用 localhost 工作

c# - DateTimeOffset.TryParseExact 的 AM/PM 有问题

c# - 内联 MultiBinding 未按预期工作

c# - string.format() 至少保留一位小数

entity-framework - 在 Windows 7 64 位上安装 Visual Studio 2010 后看不到 Entity Framework 模板