这是我在这里的第一个问题,所以要温和。
我有一个数据库模型,该模型由大约 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/