LINQ to SQL

"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" 的其它功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值