关于C#,Java等数据库框架LazyLoad的在表无外键关系时替代方案问题讨论?

fsy351 2015-08-16 11:58:58
对于数据库框架,包括现在的.net中的EF等数据库持久层框架,都提供了LazyLoad的机制,然而这个机制建立在表直接存存在主外键关系才可实现

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

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧