DataRabbit 轻量的数据访问框架(09) -- IDataSchemaAccesser
在前面介绍的很多访问器的实现中,都不需要使用者提供任何关于数据库表结构的信息(比如,主键、主外键关系等),这是因为它们都借助于IDataSchemaAccesser来获取目标数据表的大纲信息,本文就来介绍如何使用DataRabbit框架中的IDataSchemaAccesser来访问和操作数据表的大纲。
我们可以从DataRabbit的入口点IDataAccesser中获取IDataSchemaAccesser引用:
IDataSchemaAccesser 主要提供两个功能,一是获取指定表的大纲信息,二是依据大纲信息创建一个新的数据表。下面是IDataSchemaAccesser的完整定义:
{
/// <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 dataAccesserToOracle = ... ;//通过DataAccesserFactory创建IDataAccesser
DataSchema studentSchema = dataAccesserToSqlServer.GetDataSchemaAccesser(null).GetDataSchema("Student");
dataAccesserToOracle.GetDataSchemaAccesser(null).CreateTable("Student", studentSchema, false);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构