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

Info  PR: n/a  I: 2,230,000  L: error  LD: 608,013  I: n/a  Rank: 618  Age: 一月 14, 2004  I: 0  whois source Robo: yes Sitemap: yes  Rank: 814097  Price: 26 Density

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方法用于添加实体属性与数据库字段的映射关系, 看下图

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

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

 

多种数据库支持

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

 

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

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

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

 
读取采购单的代码片段

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,它也是同样的名称。

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

 

Type Converter 类型转换器

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

你可能感兴趣的:(源代码)