(完全限定類名:DataRabbit.Schema.IDataSchemaAccesser)
在前面介紹的很多通路器的實作中,都不需要使用者提供任何關于資料庫表結構的資訊(比如,主鍵、主外鍵關系等),這是因為它們都借助于IDataSchemaAccesser來擷取目标資料表的大綱資訊,本文就來介紹如何使用DataRabbit架構中的IDataSchemaAccesser來通路和操作資料表的大綱。
我們可以從DataRabbit的入口點IDataAccesser中擷取IDataSchemaAccesser引用:
IDataSchemaAccesser dataSchemaAccesser = dataAccesser.GetDataSchemaAccesser(null);
注意,與擷取前面介紹的各種通路器一樣,IDataSchemaAccesser也是通過一個Get方法得到。
IDataSchemaAccesser 主要提供兩個功能,一是擷取指定表的大綱資訊,二是依據大綱資訊建立一個新的資料表。下面是IDataSchemaAccesser的完整定義:
{
/// <summary>
/// ClearCache 清空緩存的Schema
/// </summary>
void ClearCache();
/// GetDataSchema 擷取目标表table的資料大綱
/// </summary>
DataSchema GetDataSchema(string table);
/// CreateTable 在資料庫中建立大綱與schema一緻的表
void CreateTable(string table ,DataSchema schema, bool createFKeys) ;
}
DataRabbit使用DataSchema來封裝資料表的大綱資訊,它由多個ColumnSchema和N個ForeignKey構成,如下所示:
ColumnSchema封裝了一個資料列的大綱資訊,包括:列名、列的類型、是否為主鍵、是否為自增列、是否允許為空、備注、最大長度等。
ForeignKey封裝了目前資料表的某個外鍵資訊,包括:外鍵列名稱、主表的名稱、對應的主表主鍵名稱。
另外,DataSchema還提供了一個名為PrimaryKey的屬性,用于标志目前表的主鍵--可以表示單主鍵,也可以表示聯合主鍵。
最後,我們給出一個例子,該例子示範如何在Oracle中建立一個Student表,該表的結構與SqlServer中的Student表結構一樣。
IDataAccesser dataAccesserToSqlServer = ...;//通過DataAccesserFactory建立IDataAccesser
IDataAccesser dataAccesserToOracle = ... ;//通過DataAccesserFactory建立IDataAccesser
DataSchema studentSchema = dataAccesserToSqlServer.GetDataSchemaAccesser(null).GetDataSchema("Student");
dataAccesserToOracle.GetDataSchemaAccesser(null).CreateTable("Student", studentSchema, false);