面向.NET的后关系数据库简介 - Matisse - 第三部分






4.92/5 (24投票s)
2004 年 3 月 3 日
4分钟阅读

81708

959
使用后关系数据库进行.NET编程的分步指南
引言
在本系列文章的第一篇中,我简要介绍了Matisse后关系数据库并演示了如何安装它。在第二篇中,我涵盖了后关系数据库的模式定义基础。在这第三篇文章中,我将演示如何使用在第二篇文章的附录中定义的模式来编写访问Matisse数据库的.NET程序。
虽然Matisse与ADO.NET配合良好,但我发现使用“对象API”将对象插入数据库比使用ADO.NET更容易维护。本文重点介绍如何使用“对象API”创建和存储对象到数据库,而下一篇文章将介绍如何使用ADO.NET插入或检索对象。
安装
如果您还没有安装Matisse,请从下载页面获取这两个文件
- Intel - MS Windows (文件名是 matisse70x.exe)
- .NET绑定 (文件名是 matisseDotNet70x.exe)
请先安装matisse70x.exe,然后再安装matisseDotNet70x.exe。两个安装的目标文件夹需要相同(默认为C:\Program Files\Matisse)。然后,您需要将.NET程序集文件MatisseNet.dll安装到GAC(全局程序集缓存)中。该文件默认位于C:\Program Files\Matisse\bin。您可以简单地将文件拖放到GAC文件夹中,或使用gacutil命令。
> gacutil /i "C:\Program Files\Matisse\bin\MatisseNet.dll"
.NET绑定安装附带了几个演示应用程序,可以通过菜单访问。
针对.NET绑定的文档有两个
- Matisse .NET编程指南
- API参考(可通过菜单访问:请参见上图)
代码生成
在定义了数据库模式后,您需要采取的第一步是使用mt_stbgen
命令行实用程序从数据库生成存根类。生成过程非常简单。您无需指定任何映射规则,例如对象-关系映射。使用您的主机名、数据库以及指定要使用的语言(C#或VB)的选项来执行mt_stbgen
实用程序。
> mt_stbgen your_host your_db C#
这将在您执行实用程序的文件夹中生成四个C#类(Project
、Employee
、Manager
和Task
)。这些类包含的方法和属性,它们映射到数据库模式中的属性和关系,并提供对数据库的访问。
您可以使用该实用程序指定一些选项。其中之一是‘-p
’。使用‘-p
’,您可以指定一个命名空间,其中定义了存根类。例如,下一个命令将在MatisseApp
命名空间中生成存根类。
> mt_stbgen your_host your_db C# -p MatisseApp
生成的存根类的一部分如下所示
namespace MatisseApp {
using System;
using com.matisse.reflect;
using com.matisse.Data;
using com.matisse;
// A class generated by Matisse
/// <summary>
/// Manager is a schema class generated by Matisse.
/// </summary>
public class Manager : Employee {
// Generated constructor
/// <summary>
/// Default constructor provided as an example.
/// You may modify or delete this constructor
/// </summary>
public Manager(MtDatabase db) :
base(GetClass(db)) {
}
有关mt_stbgen
实用程序的更多信息,请运行不带任何参数的mt_stbgen
,或参阅Matisse .NET编程指南中的“代码生成与数据类”部分。
创建新项目
对于本文,我创建了一个新的解决方案,其中包含两个项目:一个应用程序项目DemoApp
和一个用于生成存根类的类库PersistentClasses
。项目结构如下所示。
要将MatisseNet.dll添加到References,请右键单击References,选择Add Reference…菜单,然后单击右上角的Browse…按钮,并选择默认位于C:\Program Files\Matisse\bin下的MatisseNet.dll。
将对象存储到数据库
现在,我们准备创建.NET对象并将其存储到数据库中。下一个程序创建两个Employee
对象和一个Manager
对象。
static void Main(string[] args)
{
MtDatabase dbcon;
// --(A), see below for notes
dbcon = new MtDatabase("localhost", "example",
new MtPackageObjectFactory("MatisseApp,PersistentClasses"));
dbcon.Open(); // connect to the database
dbcon.BeginTransaction(); // start a transaction
// create an Employee object
Employee emp1 = new Employee(dbcon); // --(B)
emp1.Name = "John Venus";
emp1.BirthDate = new DateTime(1955, 10, 1);
// create another Employee object
Employee emp2 = new Employee(dbcon); // --(C)
emp2.Name = "Amy Mars";
emp2.BirthDate = new DateTime(1965, 9, 25);
// create a Manager object
Manager mgr = new Manager(dbcon); // --(D)
mgr.Name = "Ken Jupiter";
mgr.BirthDate = new DateTime(1952, 12, 15);
mgr.Title = "Director";
关于此程序的几点说明
第 (A) 行创建一个MtDatabase
对象,该对象表示到Matisse数据库的数据库连接。Matisse .NET绑定需要MtDatabase
构造函数的第三个参数,以便它可以在名为PersistentClasses
的程序集中找到MatisseApp
命名空间中的Employee
等存根类。
第 (B)、(C) 和 (D) 行正在创建将在事务提交时存储到数据库中的对象。它们使用了mt_stbgen
实用程序生成的默认构造函数,这些构造函数接受一个MtDatabase
对象作为参数,以指定对象将被存储到哪个数据库。
设置对象之间的关系
下一段代码是上述程序的延续部分。它创建了一个Project
对象,并将上面创建的Manager
对象和两个Employee
对象分别指定为项目的经理和成员。
Employee[] members = new Employee[2] {emp1, emp2};
// create a Project object, assign the two employees to the
// project, and set the manager for the project
Project prj = new Project(dbcon);
prj.ProjectName = "Whidbey";
prj.ManagedBy = mgr; // --(E)
prj.Members = members; // --(F)
dbcon.Commit(); // commit the transaction
dbcon.Close(); // disconnect from the database
您无需管理主键-外键(带中间表),只需将Manager
和Employee
对象分配给项目对象的属性即可(第 (E) 和 (F) 行)。
成功编译Visual Studio .NET项目并运行后,执行一个SQL查询来选择所有员工。您将看到类似如下的结果。
您可以看到每个参与“Whidbey
”项目的员工。
总结和下一篇文章
本文演示了如何从数据库生成存根类(持久化类),以及如何将.NET对象存储到数据库中。
下一篇文章将介绍如何使用ADO.NET和/或面向对象的API将对象从数据库检索到您的.NET应用程序中,以及如何使用ADO.NET插入对象。
历史
- 2004年3月26日:初版
许可证
本文没有明确的许可证附加,但可能包含在文章文本或下载文件本身的使用条款。如有疑问,请通过下方的讨论区联系作者。作者可能使用的许可证列表可以在此处找到。