65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (24投票s)

2004 年 3 月 3 日

4分钟阅读

viewsIcon

81708

downloadIcon

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绑定安装附带了几个演示应用程序,可以通过菜单访问。

Sample screenshot

针对.NET绑定的文档有两个

代码生成

在定义了数据库模式后,您需要采取的第一步是使用mt_stbgen命令行实用程序从数据库生成存根类。生成过程非常简单。您无需指定任何映射规则,例如对象-关系映射。使用您的主机名、数据库以及指定要使用的语言(C#或VB)的选项来执行mt_stbgen实用程序。

  > mt_stbgen your_host your_db C#

这将在您执行实用程序的文件夹中生成四个C#类(ProjectEmployeeManagerTask)。这些类包含的方法和属性,它们映射到数据库模式中的属性和关系,并提供对数据库的访问。

您可以使用该实用程序指定一些选项。其中之一是‘-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。项目结构如下所示。

Sample screenshot

要将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

您无需管理主键-外键(带中间表),只需将ManagerEmployee对象分配给项目对象的属性即可(第 (E) 和 (F) 行)。

成功编译Visual Studio .NET项目并运行后,执行一个SQL查询来选择所有员工。您将看到类似如下的结果。

Sample screenshot

您可以看到每个参与“Whidbey”项目的员工。

总结和下一篇文章

本文演示了如何从数据库生成存根类(持久化类),以及如何将.NET对象存储到数据库中。

下一篇文章将介绍如何使用ADO.NET和/或面向对象的API将对象从数据库检索到您的.NET应用程序中,以及如何使用ADO.NET插入对象。

<< 上一篇 | 下一篇 >>

历史

  • 2004年3月26日:初版

许可证

本文没有明确的许可证附加,但可能包含在文章文本或下载文件本身的使用条款。如有疑问,请通过下方的讨论区联系作者。作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.