• DataRabbit 轻量的数据访问框架(09) -- IDataSchemaAccesser


       (完全限定类名:DataRabbit.Schema.IDataSchemaAccesser

       在前面介绍的很多访问器的实现中,都不需要使用者提供任何关于数据库表结构的信息(比如,主键、主外键关系等),这是因为它们都借助于IDataSchemaAccesser来获取目标数据表的大纲信息,本文就来介绍如何使用DataRabbit框架中的IDataSchemaAccesser来访问和操作数据表的大纲。

       我们可以从DataRabbit的入口点IDataAccesser中获取IDataSchemaAccesser引用: 
       IDataSchemaAccesser dataSchemaAccesser = dataAccesser.GetDataSchemaAccesser(null);
       注意,与获取前面介绍的各种访问器一样,IDataSchemaAccesser也是通过一个Get方法得到。

       IDataSchemaAccesser 主要提供两个功能,一是获取指定表的大纲信息,二是依据大纲信息创建一个新的数据表。下面是IDataSchemaAccesser的完整定义:
        public interface IDataSchemaAccesser : ITransactionAccesser 
        {
            
    /// <summary>
            
    /// ClearCache 清空缓存的Schema
            
    /// </summary>
            void ClearCache();

            
    /// <summary>
            
    /// GetDataSchema 获取目标表table的数据大纲
            
    /// </summary>       
            DataSchema GetDataSchema(string table);

            
    /// <summary>
            
    /// CreateTable 在数据库中创建大纲与schema一致的表
            
    /// </summary>       
            void CreateTable(string table ,DataSchema schema, bool createFKeys) ;
        }

       通过接口定义,我们看到,它也继承 ITransactionAccesser 接口,这表明,IDataSchemaAccesser可以在非事务环境或事务环境中工作。
       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);

     

    转到:DataRabbit 轻量的数据访问框架 -- 序





  • 相关阅读:
    csuoj 1111: 三家人
    csu oj 1339: 最后一滴血
    csuoj 1337: 搞笑版费马大定理
    csuoj 1334: 好老师
    csu oj 1330 字符识别?
    C++动态内存分配
    变量内存分配
    codevs 2235 机票打折
    contesthunter CH Round #64
    面试分享:一年经验初探阿里巴巴前端社招
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/683615.html
Copyright © 2020-2023  润新知