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

问题描述

对于数据库框架,包括现在的.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,那个人告诉你仓储模式的,你找他,让他给你把梯子好让你爬出来

我的意思和你说的差不多,也就是在增加导航属性对应实体类的同时,物理表之间不要有外键关系

时间: 2025-01-21 07:43:13

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

hibernate的关联关系,是否数据库表中有外键没有关系?

问题描述 hibernate的关联关系,是否数据库表中有外键没有关系? hibernate的关联关系,是否数据库表中有外键没有关系?昨天使用了hibernate做了一个多对一的关系,然后在做数据库字段的时候,一开始并没有去建立外键约束,只是把关联字段的信息放了上去,然后CRUD操作都没问题,然后看了一篇帖子,上面看到数据库表中有外键约束,这时候才想起来这个事情,我加了外键以后也没什么问题,再去掉还是没有问题,那么这里是加还是不加外键呢?hibernate自己处理好了吗?有什么区别吗?以后是加好还

编写SQL查询来查找IBM DB2 for Linux和Windows数据库中的外键关系

当一个数据库中存在大量外键约束时,您可能发现难以可视化表之间的外键关系.本文将探讨如何编写 SQL 查询来查找 DB2 for Linux, UNIX, and Windows 中的外键关系. 文中将讨论以下变体. 给定一个外键父表,返回 RI(参照 完整性)子表和后代表,以及从附表到这些子表和后代表的 RI 关系路径. 修改所提供的查询,以返回数据库中所有表的结果. 样例模式 清单 1 中所示的样例模式将用于本文中的示例. 清单 1. 样例模式 set schema newton; creat

java web ssh2框架 对象和数据表问题

问题描述 java web ssh2框架 对象和数据表问题 ssh2有几个对象肯定有几个数据表.但是难道每个数据表都要生成一个对象吗?还有dao service层,这个该怎么处理啊. 解决方案 一般都是一张表对应一个实体类对象,不过有的中间关联表你也可以不创建实体类对象, 可以通过sql进行控制 解决方案二: 一般是实体类对应一张表,虽然现在大部分都是先建表在设实体类,但是也有是先成实体类然后自动生成表的.至于dao和service层不清楚你说的具体是什么问题 解决方案三: SSH框架+Orac

java-问题 如何用Java程序实现,父表的主键插入到子表的外键中?

问题描述 问题 如何用Java程序实现,父表的主键插入到子表的外键中? 需求从excel导入数据到mysql数据库,然后父表的主键是自增列,插入数据同时把主键插入子表的外键中(我已经把主表的数据插入了)

数据库表的外键应用,详细见下

问题描述 数据库表的外键应用,详细见下 如果ABC三张表,A引用B,B引用C,但是A里又有外键引用C,我该如何设计呢 解决方案 能说明下引用的字段么? 解决方案二:

mysql-请问数据库表中可以在一个表里面有两个关联同一个表的外键吗?

问题描述 请问数据库表中可以在一个表里面有两个关联同一个表的外键吗? 具体是这样的: 我有一个用户表user,一个好友表fans. fans中有三个字段 id,user_id,fans_id,其中user_id和fans_id都是跟user表的id关联的外键,我发现这样会报错. 可是用户跟好友的信息又要与用户表的信息关联,请问各位大神,怎样才不会报错或者有什么好一点的解决办法吗? 解决方案 可以的 FOREIGN KEY (user_id) REFERENCES user(id), FOREIG

主键-坐等求救,java用ssh的时候,Gson解析json有外键的时候报错

问题描述 坐等求救,java用ssh的时候,Gson解析json有外键的时候报错 解析json是用的gson,实体类涉及到三张表三个类,之间的关系是: C表的一个字段是外键,为A表的主键 C表的另一个字段是外键,为B表的主键 转json的时候报如下异常,该怎么做,请具体一点. 这是多对多的关系吧? java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy

mysql数据库-两张表没有外键 要计算每个月份poundage,proCharge这两钱的总和

问题描述 两张表没有外键 要计算每个月份poundage,proCharge这两钱的总和 SELECT SUM(poundage),SUM(proCharge) from satisfy,borrowinfo where DATE_FORMAT(satisfydate,'%Y')=DATE_FORMAT(NOW(),'%Y') and DATE_FORMAT(startTime,'%Y')=DATE_FORMAT(NOW(),'%Y') mysql数据库,sql语句改怎么写 解决方案 要看你的表

提高数据库查询效率的实用方法、外键关于性能

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0   3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引