这是我的第一个问题,所以要温柔.
我有一个数据库模型,包含大约60个描述信息和工业过程各种特征的对象.最终结果是约. 10级深物体.
我的意图是
>使用JSON将顶级对象发送到客户端
>双向绑定所述对象(有角度,但是nvm)并操纵它
>让客户端的AJAX调用引用该顶级对象
>通过Web API中的一个或两个构造函数调用重建所述对象
>通过顶级对象方法更改对象并保存更改
我的解决方案是创建一个基于EF的对象的附加层,以允许从被发送到客户端的对象中省略/添加数据,避免循环引用和由于急切/延迟加载导致的其他问题.这些对象被提供给Web API.
现在问题出现在这里:
作为附加层的结果,每当保存EF对象在链中的变化时,都需要从附加层重建EF对象.跟上这一切变得越来越艰难.
对象高度互连和受约束.我应该只为EF对象编写扩展来模拟附加层的功能吗?
如果是这种情况,JavaScriptSerializer是否会尝试序列化所有关系中的所有对象(其中序列化对象的键被定义为另一个对象中的FK)?因为这是我从错误消息中收集的内容.
或者我这样做是错的?
最佳答案 在像您这样的断开连接的应用程序中,我将删除所有导航属性.起初它们似乎很方便,但一路上会引起头痛.
我相信通过Id访问所有实体是可行的方法.
您可以编写一个JavaScript类,负责接收每个Id的实体,因此可以缓存它们.
因此,每当您需要客户端上的实体时,您都可以通过此类获得它.
这将导致每个实体拥有一个控制器.
另一个优点是你不必总是发送和接收整个对象图,这似乎是很多数据(10级深度很多).
won’t the JavaScriptSerializer try to serialize all the objects in all of the relationships
是的,它会的.这就是为什么具有导航属性的对象(尤其是循环对象)很难序列化的原因之一.