今天关于Linq,NHibernate等持久数据的理解
2009-04-17 15:47
190 查看
声明:这篇文章仅仅是我自己对这个东西的理解.读者最好只做一个参考之用
最近比较闲,于是我对VS2008 Linq技术进行了研究.其实Linq的实质就是对数据库访问类的一个封装.
在java的hibernate开源中,这点可以清晰的理解到. 这个样子,你可以完全把数据当做一个对象进行操纵.这个样子就完成了对数据里面数据的操作. 换句话说,他把面向对象化更加的对象化了.
他的最好的一个问题就是,不用你再到数据查询分析器里面去测试那些SQL.Linq里面你必须根据他的规则进行SQL的组合.当你有错误之后也能及时的提示你.减少了SQL中那些无用功.对于初学者,这个是很好的一个东西.上手相对比较容易.
不过写了一两年SQL的人使用起他就觉得很麻烦了.感觉组织相关的SQL很麻烦.是能对SQL的组合进行测试,不够相对复杂的SQL就会觉得很麻烦.特别是那种实现方法的比较多的那种.
在Linq里面,你还可以把存储过程当做方法进行执行.
Linq是很强大.不过现在问问很多,还是需要慎用!
Linq示例:
Console.WriteLine(context.area.Where(a => a.AreaID == 9).FirstOrDefault().AreaName);
在SQL 你需要
写很多的代码
string strsql="select a reaname from area where areaID=9 ";
写完SQL你还必须把他弄到ADO.NET中进行执行.感觉很麻烦吧.老程序员,基本都不必考虑这一部.估计在很早以前就进行了自己的封装.
string dbStr = "data source=.;uid=sa;pwd=sa;database=mydb";
DataSet ds = null;
try
{
SqlConnection sqlcon = new SqlConnection(dbStr);
SqlCommand sqlcmd = new SqlCommand(strSql, sqlcon);
SqlDataAdapter sqldad = new SqlDataAdapter(sqlcmd);
sqlcon.Open();
ds = new DataSet();
sqldad.Fill(ds);
sqlcon.Close();
}
catch (Exception e)
{
Response.Write("对不起,数据输入有误!");
}
同时在对数据的接收上,更加好用了.不用像以前.接受返回的是一个DataTable,DataSet这个样子.你想把他变成自己想用的实体样式,还需要写类进行相应的转换.Linq他直接使用
IQueryable<area> myareaDataTable= context.area.Where(a => a.AreaID > 9).AsQueryable()
一个实体数据集合尽行接收.可以说节约了相当多的时间.
最近比较闲,于是我对VS2008 Linq技术进行了研究.其实Linq的实质就是对数据库访问类的一个封装.
在java的hibernate开源中,这点可以清晰的理解到. 这个样子,你可以完全把数据当做一个对象进行操纵.这个样子就完成了对数据里面数据的操作. 换句话说,他把面向对象化更加的对象化了.
他的最好的一个问题就是,不用你再到数据查询分析器里面去测试那些SQL.Linq里面你必须根据他的规则进行SQL的组合.当你有错误之后也能及时的提示你.减少了SQL中那些无用功.对于初学者,这个是很好的一个东西.上手相对比较容易.
不过写了一两年SQL的人使用起他就觉得很麻烦了.感觉组织相关的SQL很麻烦.是能对SQL的组合进行测试,不够相对复杂的SQL就会觉得很麻烦.特别是那种实现方法的比较多的那种.
在Linq里面,你还可以把存储过程当做方法进行执行.
Linq是很强大.不过现在问问很多,还是需要慎用!
Linq示例:
Console.WriteLine(context.area.Where(a => a.AreaID == 9).FirstOrDefault().AreaName);
在SQL 你需要
写很多的代码
string strsql="select a reaname from area where areaID=9 ";
写完SQL你还必须把他弄到ADO.NET中进行执行.感觉很麻烦吧.老程序员,基本都不必考虑这一部.估计在很早以前就进行了自己的封装.
string dbStr = "data source=.;uid=sa;pwd=sa;database=mydb";
DataSet ds = null;
try
{
SqlConnection sqlcon = new SqlConnection(dbStr);
SqlCommand sqlcmd = new SqlCommand(strSql, sqlcon);
SqlDataAdapter sqldad = new SqlDataAdapter(sqlcmd);
sqlcon.Open();
ds = new DataSet();
sqldad.Fill(ds);
sqlcon.Close();
}
catch (Exception e)
{
Response.Write("对不起,数据输入有误!");
}
同时在对数据的接收上,更加好用了.不用像以前.接受返回的是一个DataTable,DataSet这个样子.你想把他变成自己想用的实体样式,还需要写类进行相应的转换.Linq他直接使用
IQueryable<area> myareaDataTable= context.area.Where(a => a.AreaID > 9).AsQueryable()
一个实体数据集合尽行接收.可以说节约了相当多的时间.
相关文章推荐
- 今天关于Linq,NHibernate等持久数据的理解
- 关于js artTemplate模板引擎多数据注入的理解,与应用。
- 菜鸟理解关于数据驱动和关键字驱动区别
- 关于Nhibernate在wpf中的使用:Session.Save()无法保存数据到数据库中
- 父进程和子进程关于数据和文件描述符的继承的理解
- 今天看知乎关于java反射的理解
- 今天需要获取一个网站的web服务反馈回来的数据,找到份不错的帖子关于WebClient类的使用,记录下来·
- NHibernate中关于Inverse的理解和使用
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 关于在数据库中存储层次数据的一点看法与理解
- 关于double类型数据保留有效位的一些理解
- 关于USB微帧与数据包包长与端点缓冲区的理解
- 关于 数据文件自增长 的一点理解
- 关于C#数据类型自己的理解
- 关于 数据文件自增长 的一点理解
- 关于物料主数据中MRP相关配置字段理解
- 关于:清除并发请求和(或)管理器数据 请求的理解
- 关于USB微帧与数据包包长与端点缓冲区的理解
- 关于对ajax与json数据的理解
- 关于c++的静态数据(函数)成员的理解