这是我的第一个问题,所以请保持温和。
我有一个数据库模型,包含大约60个描述信息和工业过程各种功能的对象。最终结果是约。 10层深的物体。
我的目的是
我的解决方案是创建一个基于EF的对象的附加层,以允许从发送到客户端的对象中随意省略/添加数据,避免循环引用的问题和急切引起的其他问题/延迟加载。这些对象被提供给Web API。
现在问题出现在这里: 作为附加层的结果,每当保存EF对象在链中的变化时,都需要从附加层重建EF对象。跟上这一切变得越来越艰难。
对象高度互联且受约束。我应该只为EF对象编写扩展来模拟附加层的功能吗? 如果是这种情况,那么JavaScriptSerializer会尝试序列化所有关系中的所有对象(其中序列化对象的键被定义为另一个对象中的FK)?因为这是我从错误消息中收集到的内容。
或者我这样做错了吗?
答案 0 :(得分:2)
在像您这样的断开连接的应用中,我删除所有导航属性。起初它们似乎很方便,但一路上会引起麻烦。
我相信通过Id
访问所有实体是可行的方法
您可以编写一个 JavaScript类,负责每个Id
接收实体,因此可以对其进行缓存。
因此,每次在客户端上需要实体时,您都可以通过此类获得它。
这将导致每个实体拥有一个控制器。
另一个优点是你不必总是发送和接收整个对象图,这看起来像很多数据(10级深度很多)。
JavaScriptSerializer不会尝试序列化所有关系中的所有对象
是的,它会。这就是具有导航属性的对象(尤其是循环对象)非常难以序列化的原因之一。