问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

.NET三层架构中DAL层的问题,万分感谢大神们解答

发布网友 发布时间:2022-04-08 02:37

我来回答

2个回答

热心网友 时间:2022-04-08 04:06

DataTable是原始ADO.net对象,比较简单,弊端是数据没法保留原始类型,在前端绑定时需要转换类型,也没法直接打“.”来调用成员产,简言之,不符合面向对象特征。


所以就有了ORM,对象关系映射,以实现数据表记录本身通常就可以用一个类来描述。一般用LINQ to SQL或EF来实现,如果没有做映射,纯粹手动编写类来描述数据对象,就是所谓的POCO,要做的工作多些,比如从数据库读取数据后手动将表内所有记录实例化为事先定义好的类中,再放入集合,这样在前端打"."即可调用成员,也无需再次转换类型!!


那么问题来了:你的学长让你返回List<>的目的就是希望你返回强类型的对象集合,以便前端更简便调用,以替代你之前返回的DataTable.


但是这个方法的问题就在Object把你辛苦转换好的强类型对象实例又打回原型了,因为再拿出来的时候,还需要再次转换,这就涉及到装箱拆箱,极大影响性能,违背初衷!


解决办法:

必须有合理的实体层(模型层)针对数据库映射,你可选择LINQ to SQL,LinQ to EF来实现,也可以手动写,该实体层必须合理处理好数据关系映射

2.尽量避免无必要的装拆箱,简言之不要在任何类型与object间来回转换,具体概念你百度一下就有

3.使用合理返回类型如:List<Course>


例:

class Course

    public int ID;

    public string Title;

    public List<Student> Students;

    ...

class Student

{

    public int ID;

    public string  Name;

    ...

}

追问谢谢您的耐心指导!

热心网友 时间:2022-04-08 05:24

public List<Object[]> SelectUserByCno(String Cno)
的基本操作是:给定一个课程编号,查询出选修了这门课的所有人(User)。并将课程以及选修该课程的所有的人,用List<Object[]>返回。
函数内部处理过程如下
1)调用数据中的存储过程procSelectUserByCno,从数据库选取符合条件的记录,放入一个DataTable 中
2)根据 DataTable中的行数量,定义User数组,User[]数组中元素的数量是表的行数dt.Rows.Count
3)定义一个Object数组,数组的第一个元素是Course,后续的对象User。所有Object[]数组的元素的数量是dt.Rows.Count+1
4)逐一处理DataTable中每一行,为对应的User各个属性赋值,然后放入到Object数组中。Object数组的内容为 { course, user1, user2, ……}
5)将Object[] 数组添加到List<Object[]>中并返回追问那请问也就是说DataTable中是既有user也有course是吗?
这种方法与直接返回DataTable有什么区别吗?

追答DataTable 的格式大致是这样的:
----------------------------------------------
课程 选课人信息1 选课人信息2 ……
----------------------------------------------
高数 xxxxx xxxxx
高数 yyyy yyyyy
高数 zzzz zzzzz
…… …… ……

----------------------------------------------
第一个字段是课程。所以,表中的每一行都有“高数”
现在返回的Object[] 为:{ course, user1, user2, …… }。注意:经过处理,只有1个Course了。直接返回DataTable 也是可以的,但DataTable中每行都课程,课程重复多次。所有返回Object[]比较“干练”,返回DataTable比较“臃肿”

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 假如时光倒流我能做什么 歌名是什么? 如果时光能倒流,我愿回到小时候是那首歌的歌词 歌词如果时间可以倒流 我会在第一天 请问是什么歌 如果时光真的真的能倒流这是什么歌 歌曲,歌词有一句如果时光倒流,我回归到从的温柔,歌曲的名字是什么? 如果时光可以倒流,还能回到那个天真的时候这是歌词,就歌名? 如果时光可以倒流,我愿意陪在你的左右,是哪首歌的歌词? 百度知道群聊已经登记了为什么被移除群聊? 如果时光能够倒流,我想回到曾经的温柔是什么歌名? 交叉式肩带文胸怎么穿? 内衣带子露肩装绑法 抹胸内衣肩带怎么系? 2240*1080是几寸? 旧衣回收一般卖到哪里? 有回收旧衣服厂家的电话吗 回收旧衣服生意的正规厂家 河南郑州那边有个回收旧衣服的公司,我在网上看到的这个公司,基本就是我在我这里回收旧衣服再卖给那个 倾听爱的声音500字作文+150字评语。 作文:倾听爱的声音(写三个片段) 爱的声音 作文 600字 原创 求晋江拟人小剧场全集,最好有剧本,谢谢 暑假里我( ) 作文600字左右 他们在干吗? 血狮,谁玩过,好玩吗? 爱因斯坦的早期职业是什么,他的儿子是干什么的,叫什么。现在还在吗 妹妹连忙干什么他她不8部8亿克拉咯哦夏家三千金 关于&lt;孟子&gt;二章习题,要有相关理解一类的, 造梦西游3修改器下载 造梦西游3大闹天庭篇修改器最新版 为什么我的小腿与身体特别不协调,皮下脂肪格外厚?但是我身上却特别瘦。 长江电力历史上最高股价是多少?长江电力今日股价趋势?长江电力怎么涨不起来? 上海朝天骄影视传媒有限公司怎么样? 申能股份怎么样 600642申能股份今天大跌,满仓,后市我该如何操作 申能股份怎么样啊 申能股份有限公司怎么样? 今天 中国核电 申能股份会是什么结果 六零零六四二申能股今天什么价? 申能股份2015.7.14会反弹吗 600642申能股份怎么样? 申能股份(600642)还能涨吗?