首页新闻找找看学习计划

请教ORM有什么用?

0
悬赏园豆:5 [待解决问题]

这个问题不知道会不会被打。就是ORM到底有什么必要用,我用SqlDbHelper直接写SQL访问DB很爽滑啊,为什么要那么绕,套那么多什么逻辑层、访问层,什么实体,什么关系映射。求良心解答。

ahdung的主页 ahdung | 菜鸟二级 | 园豆:206
提问于:2016-01-30 15:06
< >
分享
所有回答(11)
0

提高开发效率的,比如Entity framework

比如从GroupInfo表中查出GroupName包含“花”字的,再显示出来,就可以

         PhoneBookEntities db = new PhoneBookEntities();         
            var model = db.GroupInfo.Where(c => c.GroupName.Contains("花")).ToList();          
            model.ForEach(c => Console.WriteLine(c.GroupName));

比写SQL快多了

飞翔の金雕 | 园豆:359 (菜鸟二级) | 2016-01-30 16:52

谢谢回复。但sql更直接:

DataTable dt = db.GetTable("select * from Book where Name like '%花%');

其中db是数据访问类SqlDbHelper的一个实例。

支持(1) 反对(1) ahdung | 园豆:206 (菜鸟二级) | 2016-01-30 17:01

@ahdung: var model = db.GroupInfo.Where(c => c.GroupName.Contains("花")).ToList(); 这里直接就可以得到List<GroupInfo>了,在MVC项目中就可以Return Json(model);这样就比你用sql方便。而且ORM框架有很多种,各有各的特点。

支持(1) 反对(0) 飞翔の金雕 | 园豆:359 (菜鸟二级) | 2016-01-30 21:57

@飞翔的小鹦: 我做winform,不用mvc,DataTable对表单控件(如DataGridView)的友好比任何实体都好,即整个系统中我根本不需要GroupInfo这样的实体类,一切往返数据库的东西用DataTable承载就好。json确实是个问题,要想保留dt的所有信息(键、列、行状态等),需要用到强大的第三方dt/json互转的方案。

支持(0) 反对(0) ahdung | 园豆:206 (菜鸟二级) | 2016-02-01 08:58

@ahdung: DataTable dt = db.GetTable("select * from Book where Name like '%花%');我提一点后期扩展的问题,假如我后期数据库表很多表都变动了,BOOK表已经不需要了,用EF直接映射根本不需要改SQL语句,你这样还得一条条更改sql代码

支持(0) 反对(0) rainJune | 园豆:194 (初学一级) | 2016-04-22 14:57

@ahdung: 你这样每次都要处理下dt 不感觉烦吗

支持(0) 反对(0) 超哥带你飞 | 园豆:204 (菜鸟二级) | 2017-01-17 17:30
0

取到的数据可以直接操作,业务逻辑可以脱离数据库,你用DataTable ,整形数据还需要进行转换,不麻烦么?

刘宏玺 | 园豆:14004 (专家六级) | 2016-01-30 20:12

DataTable也可以直接操作啊,强类型dt也不需要类型转换,弱类型dt也可以给DataRow扩展个GetInt32之类的方法,直接得到相应数据类型。总之这些不是ORM更优越的理由~我觉得。

支持(0) 反对(0) ahdung | 园豆:206 (菜鸟二级) | 2016-02-01 09:01

@ahdung: 技术没有所谓优越,而是能帮我们节省很多事情,所以才会选择用它

支持(0) 反对(0) rainJune | 园豆:194 (初学一级) | 2016-04-22 15:01
0

设计理念的提升

Astar | 园豆:40805 (高人七级) | 2016-01-31 16:22
0

没啥用,除非你用。

爱编程的大叔 | 园豆:29784 (高人七级) | 2016-02-01 10:17
0

如果表结构改变了,你用大量的sql将来你怎么去找到每个sql语句,然后去修改它, 如果你用orm,所有的一切都是基于对象的操作 ,那是你就可以用到很多面向对象的知识去解耦

行走千里 | 园豆:184 (初学一级) | 2016-02-01 15:06

不用ORM我也可以按业务封装CURD操作,也可以很容易定位并修改,不至于程序中到处都是SQL,总之不用ORM不代表乱。

支持(0) 反对(0) ahdung | 园豆:206 (菜鸟二级) | 2016-02-01 15:48
0

可以给程序员省事。不用ORM当然可以,但是你需要纯手工的去读写Db中的数据。使用ORM你就省去了这些时间。当然,它本质上和你的DbHelper是一样的。

同样的道理,为什么要使用别人编写好的运行库也是这个道理。

龙葛格 | 园豆:678 (小虾三级) | 2016-02-02 16:47
0

一些联表查询,很实用便捷,一次SQL

var 订单 = db.订单表.Where(m => m.Type == "已评论").Include("商品表").Include("用户表").FirstOrDefault(m=>m.ID = xxx);

还有一些如带主从表查询条件的,很方便,反正本人发现很多项目不是业务问题,是花时间在调sql上。

保存上还有很好用的:

var item = new NewsType {  Name = "国际新闻", News = new List<News>{ new News { Title="1"}, new News{  Title="2"}, new News{  Title="3"} } };

db.NewsType.Add(item);

db.SaveChanges();

很爽,级联很多表的插入,其他精髓有兴趣再深入

搵中求胜 | 园豆:202 (菜鸟二级) | 2016-02-12 14:45

大概我是先会的SQL,后来才会的C#,真心不觉得直接写SQL有什么别扭的。

支持(0) 反对(0) ahdung | 园豆:206 (菜鸟二级) | 2016-08-18 15:08
0

汇编也挺好 你为啥不去用!

白牛吃龙虾 | 园豆:202 (菜鸟二级) | 2016-04-26 17:24

哈哈,你这回复把我逗乐了。任何事务存在既有其存在的合理性,要不都去用电脑敲键盘010101算了。

支持(0) 反对(0) tanxk | 园豆:200 (初学一级) | 2016-09-07 14:07
0

 目前你的Winform项目是用不到。大多是 web项目用的到。毕竟有可能不使用sqlserver, 会使用oracle,之类的DB

期间可能会存在一些语法上的不同。但是程序只需要写一套逻辑就可以

就类似:.net 平台上面 有 F# 、C#、VB 之类的语言,但是用的都是同一套CLR

布洛克菲勒 | 园豆:241 (菜鸟二级) | 2017-05-30 17:16
0

你拿到datatable了是这样取数据的:row["Name"].ToString();

而用orm基本上是row.Name; 你说哪个爽滑,还有智能提示,无需手写。

虚若影 | 园豆:193 (初学一级) | 2017-12-21 17:35
0

就是一个设计理念,毕竟我们是用面向对象的思想在编程,直接写sql有些不对象。

会长 | 园豆:5259 (大侠五级) | 2019-08-14 17:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册