当前位置 : 主页 > 网络编程 > 其它编程 >

LLBLGen3.x源代码追踪与解析认识框架结构

来源:互联网 收集:自由互联 发布时间:2023-07-02
LLBLGen作为一款商业的ORM工具,有强大的ORM设计器,稳定的查询语法。先来看一下,ORM的基础要素1对象和数据库表格的映射2查询的实现,对于添加,删除,修改命名,如何映射成数据
LLBLGen作为一款商业的ORM工具,有强大的ORM设计器,稳定的查询语法。先来看一下,ORM的基础要素1对象和数据库表格的映射2查询的实现,对于添加,删除,修改命名,如何映射成数据

LLBL Gen作为一款商业的ORM工具,有强大的ORM设计器,稳定的查询语法。 先来看一下,ORM的基础要素 1 对象和数据库表格的映射 2 查询的实现,对于添加,删除,修改命名,如何映射成数据库的SQL命令 3 多种数据库支持的实现

对象和数据库表格的映射

NHibernate采用的是xml文件存储实体属性与数据库字段的映射关系,之后,大量的ORM框架模范这一做法。xml文件的好处是编辑方便,不需要编译;LLBL Gen采用的是C#代码来存储实体属性与数据库字段的映射关系。 在生成的DBSpecific项目中,PersistenceInfoProvider.cs就是存储这种映射关系的文件。

internal static class PersistenceInfoProviderSingleton用于提供单件模式。以SalesOrderHeaderEntity为例子,来找到它的数据库字段的映射关系。

internal class PersistenceInfoProviderCore : PersistenceInfoProviderBase { internal PersistenceInfoProviderCore() { Init(); }

private void Init() { this.InitClass((70 + 0)); InitSalesOrderHeaderEntityMappings();

}

private void InitSalesOrderHeaderEntityMappings() { this.AddElementMapping( "SalesOrderHeaderEntity", "AdventureWorks", @"Sales", "SalesOrderHeader", 27 ); this.AddElementFieldMapping( "SalesOrderHeaderEntity", "AccountNumber", "AccountNumber", true, "NVarChar", 15, 0, 0, false, "", null, typeof(System.String), 0 ); } 先看AddElementMapping方法 会添加实体SalesOrderHeaderEntity与数据库AdventureWorks的SalesOrderHeader表的映射,也就是映射到AdventureWorks.Sales.SalesOrderHeader,它有27个数据库字段。 AddElementFieldMapping方法用于添加实体属性与数据库字段的映射关系, 看下图

image

各个参数的含义,参考图中的智能提示中的内容。

这个映射关系是由ORM设计器来维护的,添加新的字段后,启动设计器重新生成映射关系,便会更新这个文件。

多种数据库支持

LLBL Gen当前支持的数据库如下图所示

image

括号里面的是当前数据库的提供程序,用于设计器获取数据库元数据。SqlClient在安装SQL Server 2005/2008时会被安装,MySQLDirect是商业的MySQL连接访问程序,可下载免费的Express版本以使ORM设计器正常工作。 当使用Adapter模式时,使用ORM 设计器会生成2个项目结构。

DatabaseGeneric存放实体及其属性,数据关系,验证类型

image

DatabaseSpecific项目会生成数据库与实体的映射文件,以及数据访问接口DataAccessAdapter

image 读取采购单的代码片段

DataAccessAdapter adapter = new DataAccessAdapter(); SalesOrderHeaderEntity salesOrder = new SalesOrderHeaderEntity(43659); adapter.FetchEntity(salesOrder);

DataAccessAdapter派生于DataAccessAdapterBase,在设计器生成这个文件时,会加入当前的数据库驱动

protected override DynamicQueryEngineBase CreateDynamicQueryEngine() { return this.PostProcessNewDynamicQueryEngine(new DynamicQueryEngine()); } 在ORM设计时对象映射时,连接到的时SQL Server数据库,引用的是SQL Server的驱动程序,于是会在生成的

DataAccessAdapter中加入SQL Server的DynamicQueryEngine,即使换成MySQL,它也是同样的名称。

image

LLBL Gen为我们提供提供的引用方式是,一个ORMSupportClasses,适用于所有数据库,另一个则要依据ORM设计器当前连接的数据库类型,设置不同的驱动。LLBL Gen提供的查询引擎目前包含: AccessDQE,DB2DQE,FirebirdDQE,MySqlDQE,OracleDQE,PostgreSqlDQE,SqlServerCeDQE,SqlServerDQE, SybaseAsaDQE,SybaseAseDQE。

Type Converter 类型转换器

请参考文章《LLBL Gen 3.x 源代码追踪与解析 Type Converter 类型转换器》

上一篇:你如何可靠地跟踪CSS使用
下一篇:没有了
网友评论