今天遇到的一个问题,请求一段数据,返回赋值给一个对象以后序列化失败,提示“序列化类型为XX的对象时检测到循环引用”。深入进去查看Model时,发现这个要被序列化的Model里面引用了另外一个Model,另外一个Model又引用了这个Model。
我TM也是无语。事后排查是这两个表有外键关系,使用EF生成Model的时候,就会这样。
这个问题解决起来也不复杂,循环引用的Model是无法序列化的,所以我们换个实体就可以了,你可以手动赋值给自定义的新实体,也可以通过属性映射,自动映射(如AutoMapper)。
PS:外键确实可以保证数据的一致性,但是使用起来非常不便,尤其数据库迁移。数据的一致性通过代码一样可以实现,在使用数据库的时候,应当减少这些互相依赖性的东西,不然开发过程中各种掣肘,浪费时间。
当然如果你是技术大牛,你觉得无所谓就无所谓好了。每个人看法不同,这里只是吐槽。
PS:楼主邮箱 tccwpl@163.com