您的位置:首页 > 数据库

LINQ to SQL

2010-02-08 15:41 197 查看
"LINQ to SQL" 这个名字看上去有点古怪,不过换成 "System.Data.Linq",或者更干脆一点叫 "Microsoft ORM for .net",我想你就明白它能干什么了。它的用法和 XPO、Castle ActiveRecord 有那么点相似,通过特性定义实体(Entity),然后使用一个上下文对象(Context)来管理实体的操作。

开发演示

1. 准备相应的数据库。虽然 LINQ to SQL 能通过实体定义来生成数据库,但为了演示方便,我们事先准备好一个简单的数据库。

SQL Server 2005
-------------------------



2. 定义实体类型。

引入 "System.Data.Linq" 后,我们就可以使用一些特定的特性(Attribute)来定义实体。比如用 TableAttribute 定义对应的数据表,用 ColumnAttribute 定义对应的数据列,是不是和 ActiveRecord 很像?本文只是做简单的演示,有关更具体的细节,请参考 MSDN 文档。

using System.Data.Linq;

[Table(Name="User")]
public class User
{
[Column(Name="Id", IsDBGenerated=true, IsPrimaryKey=true)]
public int Id { get; set; }

[Column(Name="Name")]
public string Name { get; set; }
}

3. 创建调用代码。

"LINQ to SQL" 通过 DataContext 和 Table<T> 类型来管理实体的操作行为。

(1) 添加

string connStr = @"Data Source=...";
using (DataContext context = new DataContext(connStr))
{
Table<User> users = context.GetTable<User>();

User u = new User();
u.Name = "Tom";

users.Add(u);

context.SubmitChanges();
}

(2) 查询

string connStr = @"Data Source=...";
using (DataContext context = new DataContext(connStr))
{
Table<User> users = context.GetTable<User>();

var q = (from u in users where u.Name == "tom" select u).First();
Console.WriteLine(q.Name);
}

(3) 更新

string connStr = @"...";
using (DataContext context = new DataContext(connStr))
{
Table<User> users = context.GetTable<User>();

User q = (from u in users where u.Name == "tom" select u).First();
q.Name = "tom2";

context.SubmitChanges();
}

(4) 删除

string connStr = @"Data Source=...";
using (DataContext context = new DataContext(connStr))
{
Table<User> users = context.GetTable<User>();

User q = (from u in users where u.Name == "tom2" select u).First();
users.Remove(q);

context.SubmitChanges();
}

(5) 刷新

string connStr = @"Data Source=...";
using (DataContext context = new DataContext(connStr))
{
Table<User> users = context.GetTable<User>();

// 创建新用户
User user = new User();
user.Name = "user1";
users.Add(user);
context.SubmitChanges();

// 查询并修改
User q = users.Single<User>(u => u.Name == "user1");
q.Name = "xxxxxx";
context.SubmitChanges();

// 刷新对象
context.Refresh(user, RefreshMode.OverwriteCurrentValues);
Console.WriteLine(user.Name);
}

上面的例子虽然很简单,但可以看出其使用方法非常简单。加上 LINQ 语法,可以想象这将对 .net 平台的 ORM 产生深远的影响。

按照惯例,Visual Studio 肯定会提供自动代码生成工具,我们可以使用内置的 "LINQ to SQL File" 将数据表从 Database Explorer 直接拖拽到 Diagram 来生成实体和强类型 DataContext 代码。如果想自己开发代码生成器,那么还有相应的命令行工具(C:/Program Files/Microsoft Visual Studio 9.0/SDK/v3.5/Bin/SqlMetal.exe)可以使用。







我们会在后面的章节继续研究 "LINQ to SQL" 的其它功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: