天天看點

DataRabbit 輕量的資料通路架構(09) -- IDataSchemaAccesser

   (完全限定類名: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);