大家好,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是如何工作的。