DLinq 快速入门






2.98/5 (20投票s)
轻松开始使用 DLinq
引言
我将展示在项目中开始使用 DLinq 的步骤。Visual Studio 2008 将内置 LINQ 支持。要与 Visual Studio 2005 一起使用,我们需要下载并安装 LINQ 安装程序。
创建新项目
安装 Linq 设置后,Visual Studio 2005 项目类型树中会添加新的项目类型。现在,我们通过“文件”>“新建项目”菜单添加一个 LINQ 控制台应用程序。

现在,我们在数据库中创建一个表。
CREATE TABLE USERS
(
LogonID nVARCHAR(20) NOT NULL PRIMARY KEY,
Name NVARCHAR(50),
Password NVARCHAR(30),
EmailAddress NVARCHAR(50),
LastLogon DateTime
);
现在,添加我们的映射对象类 User
[Table(Name="users")]
public class User
{
private string logonID;
private string name;
private string password;
private string emailAddress;
private DateTime lastLogon;
public User()
{
}
[Column (Id=true, Storage = "logonID")]
public string LogonID
{
get { return logonID; }
set { logonID = value; }
}
[Column(Storage = "name")]
public string Name
{
get { return name; }
set { name = value; }
}
[Column(Storage = "password")]
public string Password
{
get { return password; }
set { password = value; }
}
[Column(Storage = "emailAddress")]
public string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
[Column(Storage = "lastLogon")]
public DateTime LastLogon
{
get { return lastLogon; }
set { lastLogon = value; }
}
}
我们使用 Table
属性为每个类分配表名。这里我们使用 [Table(Name="users")]
将 User
类分配给“users
”表。然后,我们添加带有参数的 Column
属性。我们可以将 Storage
参数分配给实际的类 private
字段。我们有一个布尔 Id 参数,用于将属性分配为 ID
字段。
加载数据
现在我们需要创建一个 DataContext
对象。
DataContext db = new DataContext(
@"Data Source=localhost\sqlexpress;Initial Catalog=master;Integrated Security=True"
);
我们将数据库连接字符串作为构造函数参数提供。现在,我们创建一个表并从数据库加载所有用户。
Table<User> userTable = db.GetTable<User>();
db.Log = Console.Out;
var users = from c in userTable
select c;
foreach (User u in users) {
Console.WriteLine(u.LogonID);
}
好的,我们已经完成了。现在,让我们添加一些功能。
插入操作
要插入,我们创建一个映射对象的新实例并将其添加到表中
User u1= new User();
u1.LogonID="manir";
u1.Name="Maruf Maniruzzaman";
u1.Password="1234";
u1.LastLogon=DateTime.Now;
userTable.Add(u1);
db.SubmitChanges();
我们调用 SubmitChanges
来应用更改。
修改操作
首先,我们加载一个用户。
User u2 = userTable.Single(u => u.LogonID == "manir");
这等同于
select * from users u where u.LogonID="manir" limit 1
它返回一行。我们现在更改对象的某个属性,然后在数据库中更新该行。
u2.Password="5678";
db.SubmitChanges();
是的,u2
是一个实时对象,如果我们更改它的任何属性并提交,数据库行将相应地更改。
删除操作
这里我们从表中加载对象,并调用 Table
的 Remove
方法进行删除。
User u3 = userTable.Single(u => u.LogonID == "maruf");
userTable.Remove(u3);
db.SubmitChanges();
需要注意的是,我们可以执行多个操作,然后一次性调用 DataContext
对象的 SubmitChanges
来应用所有更改。因此,接下来是事务管理。
数据库事务
我们希望将之前的操作作为单一原子步骤完成。我们需要管理事务。DLINQ 使这非常简单。只需
db.Connection.Open();
db.LocalTransaction = db.Connection.BeginTransaction();
try
{
User u1= new User();
u1.LogonID="manir";
u1.Name="Maruf Maniruzzaman";
u1.Password="1234";
u1.LastLogon=DateTime.Now;
userTable.Add(u1);
User u2 = userTable.Single(u => u.LogonID == "sumi");
User u3 = userTable.Single(u => u.LogonID == "maruf");
u2.Password="5678";
userTable.Remove(u3);
//We now submit all changes
db.SubmitChanges();
//Last statement is commit
db.LocalTransaction.Commit();
}catch(Exception ex)
{
// On any error we rollback everything
db.LocalTransaction.Rollback();
}
//We are done with the LocalTransaction at this point
db.LocalTransaction = null;
同样(也是一种更好的方式)可以将 db.SubmitChanges()
包装在事务范围内,如下所示:
using(TransactionScope ts = new TransactionScope()) {
//Do some operations.....
db.SubmitChanges();
ts.Complete();
}
使用设计器
到目前为止,我们都是手动添加映射对象。现在,我们使用 DLinq 设计器来完成这项工作。我们可以从服务器/数据库资源管理器中拖动表来创建映射对象,并使用图形工具在它们之间创建关联(关系)。
首先,我们在项目中添加一个新的DLinqObjects 文件。
Project -> Add New Item -> DLinqObjects
将创建一个绘图表面。我们在那里进行绘图。
现在,我们从服务器资源管理器(Server Explorer)的连接树中拖动“users
”表并将其放到绘图表面上。表将以图形格式显示。添加项目可能需要的所有表。
现在构建项目,然后为相应的表生成映射类到后备 C# 文件中。
您可以使用生成的类,就像我们使用手动创建的类一样。您也可以从生成的类创建对象数据源。为此,从“数据”菜单中,选择“添加新数据源”,然后选择“对象”类型,接着从类树中选择类(例如,现在是 User 类)。您可以将其与数据控件一起使用。
SQL Metal - 实体类生成器工具
随着 LINQ 的发布,我们获得了一个实体类生成器。我们可以使用它直接生成实体类,或者生成一个描述元数据的 XML 文件,然后从该 XML 文件中生成实体类。在命令行中,我们使用以下语法:
>sqlmetal [options] [<input file>]
例如
>>sqlmetal /server:localhost\SQLEXPRESS /database:master
/namespace:MyPrj /code:users.cs
使用此工具生成实体类并避免重复工作。
自动导出架构
我们可能希望 DLINQ 为我们自动创建数据库架构。一种方法是我们需要继承DataContext
类,并在其中将所有表定义为 public
成员。所以,我们定义 OurDataContext
类如下:public class OurDataContext: DataContext
{
public Table<Users> users;
public OurDataContext(string connection) : base(connection) {}
}
//.......
//.......
//Now call following to export schema...
DataContext db = new OurDataContext(
@"Data Source=localhost\sqlexpress;Initial Catalog=master;Integrated Security=True"
);
db.CreateDatabase();
就是这样。它将根据元数据创建 users
表。
好的,这可能只是一个快速入门。我会提供更多信息。我会找时间改进这篇文章(以及其他 3 篇文章)。在发布文章后,我已经做了很多修改。我将向您展示一个实际示例 - 如何设计业务应用程序的数据访问层。但这不可能一步完成。我将边学边写,将 J2EE 的知识与 .NET 进行映射。谢谢。
参考文献
- LINQ 实操实验
LINQ 安装文件夹中也有很多文档。这篇文章是对这些文档的总结。