程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 使用LINQS 0.0.6描述數據庫模型和創建數據庫

使用LINQS 0.0.6描述數據庫模型和創建數據庫

編輯:關於.NET

大家好,a_a寫文檔的經驗有限,不過從今天開始我會嘗試將剛剛發布的LINQS 0.0.6通過文檔介紹給 大家。

其實使用LINQS應該是件非常簡單惬意的事情,今天我們先來看看其中最簡單的描述數據庫模型並通過 它來創建物理數據庫。

在開始前,也許您會願意通過發布文檔了解一下“什麼是LINQS 0.0.6”,以及使用LINQS 0.0.6的基 本需求。

一、描述一個簡單的名片數據庫模型:

首先添加對Katmai項目和Xbb.Data.SqlServerModel.Katmai命名空間的引用,這個命名空間提供SQL Server 2008業務對象的描述服務。

var profession = new Table
{
    Name = "Profession",
    Columns = new IColumn[] {
        new Column { Name = "Name", Type = new NVarChar(50) } }
};
var r = new Database
{
    Name = "NameCards",
    Tables = new Table[] {
        new Table { Name = "Person", Columns = new IColumn[] {
            new Column { Name = "Name", Type = new NVarChar(50) },
            new Column { Name = "Age", Type = new Int() },
            new AssociationColumn { Name = "ProfessionID", Table = profession } } },
        profession }
};

這段代碼描述了名片數據庫中的專業(類型)和人物兩個表以及我們關心的一些列,下面這段代碼幫 我們創建“ID”、“RowGuid”和最後修改時間等系統列:

foreach (var t in r.Tables)
{
    if (t.PrimaryKey == null)
    {
        var id = new IdentityColumn(t.Name + "ID");
        t.Columns = new Column[] { id }.Concat(t.Columns);
        t.IdentityColumn = id;
        t.PrimaryKey = new IColumn[] { id };
        t.Keys = new IEnumerable<IColumn>[] { t.PrimaryKey };
    }
    var rowGuid = new RowGuidColumn { };
    var modifiedDate = new ModifiedDateColumn { };
    t.RowGuidColumn = rowGuid;
    t.Columns = t.Columns.Concat(new Column[] { rowGuid, modifiedDate });
}

至此一份數據庫模型描述就完成了,大家可以在源代碼中的 “_Katmai\Katmai\Katmai\Descriptor\Sample.cs”中找到類似的描述以及更多的作為案例的數據庫描述 。

在上面這段代碼中我們看到的Table的IdentityColumn、PrimaryKey、Keys等屬性是根據在Database Diagram設計視圖(SQL Server Management Studio和Visual Studio Team Suite中集成)中的對象結構 映射的,這比SQL腳本語言中的結構更加細致完整。

二、輸出建庫代碼:

Xbb.Data.SqlServerModel.Katmai.Script.Create命名空間提供了對各種SQL Server 2008對象描述生 成SQL腳本的服務,生成的腳本可以用於創建數據庫中的實際對象。

string script = new Script.Create.Database(r).ToString();

輸出應該會類似於:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Person](
    [PersonID] Int NOT NULL IDENTITY,
    [Name] NVarChar(50) NOT NULL,
    [Age] Int NOT NULL,
    [ProfessionID] Int NOT NULL,
    [rowguid] UniqueIdentifier NOT NULL,
    [ModifiedDate] DateTime NOT NULL,
 CONSTRAINT [PK_Person_1] PRIMARY KEY CLUSTERED
(
    [PersonID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
CREATE TABLE [Profession](
    [ProfessionID] Int NOT NULL IDENTITY,
    [Name] NVarChar(50) NOT NULL,
    [rowguid] UniqueIdentifier NOT NULL,
    [ModifiedDate] DateTime NOT NULL,
 CONSTRAINT [PK_Profession_1] PRIMARY KEY CLUSTERED
(
    [ProfessionID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [Person]
  ADD CONSTRAINT [FK_Person_Profession_ProfessionID] FOREIGN KEY ([ProfessionID]) REFERENCES [Profession]([ProfessionID])
  ON DELETE NO ACTION

很簡單對嗎?請查閱源代碼中的“_Katmai\KatmaiTest\KatmaiTest\ScriptTest.cs”,這裡執行了類 似的測試,並且提供了更多案例。

三、創建數據庫:

Xbb.Data.SqlServerModel.Katmai.Physical命名空間提供了對本地安裝的SQL Server Express 2008 數據庫軟件的操作能力,可以代您對物理數據庫進行創建和維護。

string name = "AdventureWorks2008", d = /* 選擇一個文件夾來創建數據庫文件,請注意必 須是您有寫權限的文件夾,例如“我的文檔”或“桌面”下的某個子文件夾。 */,
    databaseFile = Path.Combine(d, name + ".mdf");
using (var physical = ExpressDatabase.Create(name, databaseFile, true, OnDisposeTask.DetachDatabaseAndKeepFiles))
{
    physical.RunScript(script, null);
};

在這之後,您可以在您指定的文件夾中找到剛剛創建的數據庫文件了。 “_Katmai.Physical\Katmai.Physical.Test\Katmai.Physical.Test\ExpressDatabaseTest.cs”提供了 更多測試來演示ExpressDatabase是如何工作的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved