问题描述
对于数据库框架,包括现在的.net中的EF等数据库持久层框架,都提供了LazyLoad的机制,然而这个机制建立在表直接存存在主外键关系才可实现对于现行的市场境况,多数成功项目为了便于扩展,都不建立外键,使得LazyLoad的机制不能使用,那么在没有外键情况下能否实现类似于LazyLoad,在程序逻辑上建立关系,实现LazyLoad呢?
解决方案
解决方案二:
按你的话说,“数据库框架,包括现在的.net中的EF等数据库持久层框架”如果不使用LazyLoad机制加载,而是一次性就把集合类型的属性或者字段值就加载出来,那么它就不需要外键了?你能举出EF的这样不需要外键也不需要LazyLoad的一个例子么?
解决方案三:
正常的逻辑是:只要搞懂一个对象的集合类型的属性或者字段是如何加载的,就能搞懂LazyLoad的机制,不需要先去纠结外键问题。
解决方案四:
为了便于扩展,都不建立外键我最近被一个项目坑成不样子了,所以为了数据完整性和我会加上数据各种约束我觉得应该是可以的,当你用到外表的时候EF会监控到然后去读取但我也不知道怎么搞,猜想
解决方案五:
数据库不建立外键约束,也可以在ORM建立约束的啊,虽然EF用的不多,但有一阵子LinqToSQL用的挺多,那个都可以建立约束,更不要说EF了
解决方案六:
如果能够直接加载集合属性(或者字段),那么就能轻易地重构为实现LazyLoad机制的。所以如果某个框架就是依据外键才能自动加载集合属性(或者字段),如果你偏说人家是因为LazyLoad才要求有外键的,这就张冠李戴了。而且这样瞎猜原因,也就走入了死胡同。
解决方案七:
有没有外键跟有没有LazyLoad机制无关,它是跟你使用的DAL层框架如何去加载集合属性有关的。这就好比如说一个超市它有一帮女收银员,这些女收银员都比男员工多出来三八节、产假、哺乳假等假期,并且这些女收银员都有身份证可以验明身份。你不能说这些女收银员能够验明身份,是因为她们都有产假吧?
解决方案八:
额,我想你指的不是神马lazyload,还是指导航属性如果是导航属性,我想你的明白一点EF本身就是延后查询,只要你不跟着什么博客园学什么仓储模式,自然就半点不会纠结,因为他对外提供的其实是Iqueryalbe<T>,so,如果你想加关联查询,随时可以用join和select自己弄如果你不小心进了博客园所谓仓储模式的坑,我们只能说sorry,那个人告诉你仓储模式的,你找他,让他给你把梯子好让你爬出来
解决方案九:
引用7楼wanghui0380的回复:
额,我想你指的不是神马lazyload,还是指导航属性如果是导航属性,我想你的明白一点EF本身就是延后查询,只要你不跟着什么博客园学什么仓储模式,自然就半点不会纠结,因为他对外提供的其实是Iqueryalbe<T>,so,如果你想加关联查询,随时可以用join和select自己弄如果你不小心进了博客园所谓仓储模式的坑,我们只能说sorry,那个人告诉你仓储模式的,你找他,让他给你把梯子好让你爬出来
我的意思和你说的差不多,也就是在增加导航属性对应实体类的同时,物理表之间不要有外键关系