这个问题不知道会不会被打。就是ORM到底有什么必要用,我用SqlDbHelper直接写SQL访问DB很爽滑啊,为什么要那么绕,套那么多什么逻辑层、访问层,什么实体,什么关系映射。求良心解答。
提高开发效率的,比如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快多了
谢谢回复。但sql更直接:
DataTable dt = db.GetTable("select * from Book where Name like '%花%');
其中db是数据访问类SqlDbHelper的一个实例。
@ahdung: var model = db.GroupInfo.Where(c => c.GroupName.Contains("花")).ToList(); 这里直接就可以得到List<GroupInfo>了,在MVC项目中就可以Return Json(model);这样就比你用sql方便。而且ORM框架有很多种,各有各的特点。
@飞翔的小鹦: 我做winform,不用mvc,DataTable对表单控件(如DataGridView)的友好比任何实体都好,即整个系统中我根本不需要GroupInfo这样的实体类,一切往返数据库的东西用DataTable承载就好。json确实是个问题,要想保留dt的所有信息(键、列、行状态等),需要用到强大的第三方dt/json互转的方案。
@ahdung: DataTable dt = db.GetTable("select * from Book where Name like '%花%');我提一点后期扩展的问题,假如我后期数据库表很多表都变动了,BOOK表已经不需要了,用EF直接映射根本不需要改SQL语句,你这样还得一条条更改sql代码
@ahdung: 你这样每次都要处理下dt 不感觉烦吗
取到的数据可以直接操作,业务逻辑可以脱离数据库,你用DataTable ,整形数据还需要进行转换,不麻烦么?
DataTable也可以直接操作啊,强类型dt也不需要类型转换,弱类型dt也可以给DataRow扩展个GetInt32之类的方法,直接得到相应数据类型。总之这些不是ORM更优越的理由~我觉得。
@ahdung: 技术没有所谓优越,而是能帮我们节省很多事情,所以才会选择用它
设计理念的提升
没啥用,除非你用。
如果表结构改变了,你用大量的sql将来你怎么去找到每个sql语句,然后去修改它, 如果你用orm,所有的一切都是基于对象的操作 ,那是你就可以用到很多面向对象的知识去解耦
不用ORM我也可以按业务封装CURD操作,也可以很容易定位并修改,不至于程序中到处都是SQL,总之不用ORM不代表乱。
可以给程序员省事。不用ORM当然可以,但是你需要纯手工的去读写Db中的数据。使用ORM你就省去了这些时间。当然,它本质上和你的DbHelper是一样的。
同样的道理,为什么要使用别人编写好的运行库也是这个道理。
一些联表查询,很实用便捷,一次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();
很爽,级联很多表的插入,其他精髓有兴趣再深入
大概我是先会的SQL,后来才会的C#,真心不觉得直接写SQL有什么别扭的。
汇编也挺好 你为啥不去用!
哈哈,你这回复把我逗乐了。任何事务存在既有其存在的合理性,要不都去用电脑敲键盘010101算了。
目前你的Winform项目是用不到。大多是 web项目用的到。毕竟有可能不使用sqlserver, 会使用oracle,之类的DB
期间可能会存在一些语法上的不同。但是程序只需要写一套逻辑就可以
就类似:.net 平台上面 有 F# 、C#、VB 之类的语言,但是用的都是同一套CLR
你拿到datatable了是这样取数据的:row["Name"].ToString();
而用orm基本上是row.Name; 你说哪个爽滑,还有智能提示,无需手写。
就是一个设计理念,毕竟我们是用面向对象的思想在编程,直接写sql有些不对象。