Linq技术一:Linq to SQL和Devart Linq to SQL Model
2014-05-23 11:17
218 查看
Linq技术是在C# 3.0里面发布的,最初包含Linq to SQL, Linq to Object 和Linq to xml。然后在4.0里面发布了DLR动态语言运行时,所以有了Linq动态实现方式。
介绍一下命名空间:
System.Linq;
System.Linq.Expressions;
System.XML.Linq;
System.Data.Linq;
介绍一下Linq相关的接口:
IEnumerable<T>, IQueryable<T>
任何继承了上面接口的对象都可以使用Linq技术。
先说Linq to SQL:
在Visual Studio 2010里面可以创建Linq To SQL类,直接在项目里面选择新增Linq to Sql即可。目前最新版本Visual Studio 2013里面也支持Linq to Sql,还多了几种选择:devart Entity Model, Devart Linq to SQL Model, Devart NHibernate Model. 来说一下Devart,Devart是Devart Software,一家软件公司,扩充了这些方法。可访问:http://forums.asp.net/t/1725858.aspx?New+Version+of+Devart+Entity+Developer+with+ENUM+Support+and+Other+Enhancements
Linq to SQL class和Devart Linq to SQL Model有些细微差别,如果是Linq to SQL class,可以直接把SQL stored procedure和function当作一个实体来操作,可以自己选择将哪些表添加到DBContext里面,但Devart是默认全部添加,不能添加SP和function。Linq to SQL不具有code first或model first的功能,默认操作是database first, 但Devart具有两种选择,这个可以算是Linq
to SQL的升级应用,微软可能选择停止更新Linq to SQL。
Microsoft Linq to SQL编辑窗口:
Devart编辑窗口:
Devart 新建窗口:
在操作上没有多大区别,看看具体增删改和查询怎么操作:
//实例化DBContext
OTPDataContext devartDB = new OTPDataContext();
DataClasses1DataContext dbContext = new DataClasses1DataContext();
//返回特定行数的列表
public IQueryable<DataListForDemo> GetList(int count)
{
var dataList = dbContext.DataListForDemos.Take(count);
return dataList;
}
//新增数据
public void insertDB(DataListForDemo model)
{
dbContext.DataListForDemos.InsertOnSubmit(model);
dbContext.SubmitChanges();
}
//删除数据
public void deleteData(DataListForDemo model)
{
dbContext.DataListForDemos.DeleteOnSubmit(model);
dbContext.SubmitChanges();
}
//修改单行数据
public void updateDBByID(DataListForDemo model)
{
DataListForDemo iModel = dbContext.DataListForDemos.Where(p => p.ID == model.ID).SingleOrDefault();
iModel.col1 = model.col1;
iModel.col2 = model.col2;
iModel.col3 = model.col3;
dbContext.SubmitChanges();
}
//修改多行数据
public void updateDBMulti(DataListForDemo model)
{
var iModel = dbContext.DataListForDemos.Where(p => p.col1 == model.col1);
foreach(DataListForDemo m in iModel)
{
m.col2 = model.col2;
m.col3 = model.col3;
}
dbContext.SubmitChanges();
}
//运行调试时或记录日志的方法:
dbContext.Log("Log Info:xxx");
dbContext.GetCommand(IQueryable); //返回Linq生成的SQL语句,非常方便调试或记录日志用
数据库连接的定义是在目录下面的app.config配置文件里面:
<connectionStrings>
<add name="UTConsoleApplication.Properties.Settings.OTPConnectionString"
connectionString="Data Source=localhost;Initial Catalog=OTP;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
可以看到name的值实际上是一个资源字符串,再看看Settings.Settings资源文件,打开Properties目录:
Key : OTPConnectionString
Value : Data Source=localhost;Initial Catalog=OTP;Integrated Security=True
数据库连接是在什么地方用到的呢?看看DBML下面的文件:
第一个无参数的构造函数,字符串放到了Base里面,
public DataClasses1DataContext() :
base(global::UTConsoleApplication.Properties.Settings.Default.OTPConnectionString, mappingSource)
{
OnCreated();
}
因为DataClasses1DataConext继承自DataContext,那么看看DataContext对应的数构造函数是什么:
//
// Summary:
// Initializes a new instance of the System.Data.Linq.DataContext class by referencing
// a file source and a mapping source.
//
// Parameters:
// fileOrServerOrConnection:
// This argument can be any one of the following:The name of a file where a
// SQL Server Express database resides.The name of a server where a database
// is present. In this case the provider uses the default database for a user.A
// complete connection string. LINQ to SQL just passes the string to the provider
// without modification.
//
// mapping:
// A source for mapping.
public DataContext(string fileOrServerOrConnection, MappingSource mapping);
因为是系统函数无法看到具体实现,但可以理解的是在DataContext里面的这个构造函数作了数据库连接的动作。
在designer.cs文件里面自动生成了实体类、和没有具体实现的增删改的部分方法(partial method)。所以只需要根据自己的需求写新方法就行,这就是ORM的好处所在。
介绍一下命名空间:
System.Linq;
System.Linq.Expressions;
System.XML.Linq;
System.Data.Linq;
介绍一下Linq相关的接口:
IEnumerable<T>, IQueryable<T>
任何继承了上面接口的对象都可以使用Linq技术。
先说Linq to SQL:
在Visual Studio 2010里面可以创建Linq To SQL类,直接在项目里面选择新增Linq to Sql即可。目前最新版本Visual Studio 2013里面也支持Linq to Sql,还多了几种选择:devart Entity Model, Devart Linq to SQL Model, Devart NHibernate Model. 来说一下Devart,Devart是Devart Software,一家软件公司,扩充了这些方法。可访问:http://forums.asp.net/t/1725858.aspx?New+Version+of+Devart+Entity+Developer+with+ENUM+Support+and+Other+Enhancements
Linq to SQL class和Devart Linq to SQL Model有些细微差别,如果是Linq to SQL class,可以直接把SQL stored procedure和function当作一个实体来操作,可以自己选择将哪些表添加到DBContext里面,但Devart是默认全部添加,不能添加SP和function。Linq to SQL不具有code first或model first的功能,默认操作是database first, 但Devart具有两种选择,这个可以算是Linq
to SQL的升级应用,微软可能选择停止更新Linq to SQL。
Microsoft Linq to SQL编辑窗口:
Devart编辑窗口:
Devart 新建窗口:
在操作上没有多大区别,看看具体增删改和查询怎么操作:
//实例化DBContext
OTPDataContext devartDB = new OTPDataContext();
DataClasses1DataContext dbContext = new DataClasses1DataContext();
//返回特定行数的列表
public IQueryable<DataListForDemo> GetList(int count)
{
var dataList = dbContext.DataListForDemos.Take(count);
return dataList;
}
//新增数据
public void insertDB(DataListForDemo model)
{
dbContext.DataListForDemos.InsertOnSubmit(model);
dbContext.SubmitChanges();
}
//删除数据
public void deleteData(DataListForDemo model)
{
dbContext.DataListForDemos.DeleteOnSubmit(model);
dbContext.SubmitChanges();
}
//修改单行数据
public void updateDBByID(DataListForDemo model)
{
DataListForDemo iModel = dbContext.DataListForDemos.Where(p => p.ID == model.ID).SingleOrDefault();
iModel.col1 = model.col1;
iModel.col2 = model.col2;
iModel.col3 = model.col3;
dbContext.SubmitChanges();
}
//修改多行数据
public void updateDBMulti(DataListForDemo model)
{
var iModel = dbContext.DataListForDemos.Where(p => p.col1 == model.col1);
foreach(DataListForDemo m in iModel)
{
m.col2 = model.col2;
m.col3 = model.col3;
}
dbContext.SubmitChanges();
}
//运行调试时或记录日志的方法:
dbContext.Log("Log Info:xxx");
dbContext.GetCommand(IQueryable); //返回Linq生成的SQL语句,非常方便调试或记录日志用
数据库连接的定义是在目录下面的app.config配置文件里面:
<connectionStrings>
<add name="UTConsoleApplication.Properties.Settings.OTPConnectionString"
connectionString="Data Source=localhost;Initial Catalog=OTP;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
可以看到name的值实际上是一个资源字符串,再看看Settings.Settings资源文件,打开Properties目录:
Key : OTPConnectionString
Value : Data Source=localhost;Initial Catalog=OTP;Integrated Security=True
数据库连接是在什么地方用到的呢?看看DBML下面的文件:
第一个无参数的构造函数,字符串放到了Base里面,
public DataClasses1DataContext() :
base(global::UTConsoleApplication.Properties.Settings.Default.OTPConnectionString, mappingSource)
{
OnCreated();
}
因为DataClasses1DataConext继承自DataContext,那么看看DataContext对应的数构造函数是什么:
//
// Summary:
// Initializes a new instance of the System.Data.Linq.DataContext class by referencing
// a file source and a mapping source.
//
// Parameters:
// fileOrServerOrConnection:
// This argument can be any one of the following:The name of a file where a
// SQL Server Express database resides.The name of a server where a database
// is present. In this case the provider uses the default database for a user.A
// complete connection string. LINQ to SQL just passes the string to the provider
// without modification.
//
// mapping:
// A source for mapping.
public DataContext(string fileOrServerOrConnection, MappingSource mapping);
因为是系统函数无法看到具体实现,但可以理解的是在DataContext里面的这个构造函数作了数据库连接的动作。
在designer.cs文件里面自动生成了实体类、和没有具体实现的增删改的部分方法(partial method)。所以只需要根据自己的需求写新方法就行,这就是ORM的好处所在。
相关文章推荐
- LINQ to SQL (Part 2 - Defining our Data Model Classes)
- Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数据库子表方法
- 比较LINQ to SQL Diagram 和Entity Data Model
- 一起谈.NET技术,【译】ASP.NET MVC并不仅仅只是Linq to SQL
- 一起谈.NET技术,使用LINQ to SQL更新数据库(上):问题重重
- 比较LINQ to SQL Diagram 和Entity Data Model
- 一起谈.NET技术,LINQ to SQL快速上手 step by step
- Linq TO Sql 使用反射技术更新数据库
- LINQ to SQL系列Part 2 - Defining our Data Model Classes
- [技术][.NET]<<一步一步学Linq to sql>> -- Joney Liu博客园整理
- ADO.NET - Entity Data Model vs. LINQ To SQL
- Linq to SQL 技术贴汇总
- linq to sql 分页技术
- 一起谈.NET技术,使用LINQ to SQL更新数据库(中):几种解决方案
- Silverlight + WCF使用Linq to SQL以及ADO.NET Entity Data Model更新数
- 分别使用ADO.Net Entity Data Model 和Linq to Sql 建立数据访问层
- Linq的技术太强大了分享一下(linq to sql 的插入、更新、查询、删除)
- 【转载】LINQ to SQL (Part 2 - Defining our Data Model Classes)
- LINQ TO SQL技术
- ScottGu's 博客之--LINQ to SQL 第二部分-定义数据模型类--LINQ to SQL (Part 2 - Defining our Data Model Classes)