AgileEAS.NET之ORM访问器

简介:
  上一篇文章 AgileEAS.NET之数据关系映射ORM简单介绍了一下AgileEAS.NET平台中ORM对象的组织机构体系,但并没有对其所执行的数据存取操作介绍,在AgileEAS.NET中,我对ORM实体及其上的数据操作实现进行了分离,实体对象只呈现数据,而实体的增加、修改、更新、删除、缓存操作都通过ORM访问器实现。
    在AgileEAS.NET两个访问器IOrmAccessor和ICacheAccessor访问器。
ORM2
IOrmAccessor完成ORM对象(实体和表)和数据库的交互工作:查询、增加、修改、删除极其辅助任务,其接口详细定义如下:
    /// <summary>
    /// 定义ORM访问器接口。	
    /// </summary>
    public interface IOrmAccessor : IOrmEnvironment
    {
        /// <summary>
        /// 保存数据实体。
        /// </summary>
        /// <param name="entity">数据实体。</param>
        void Save(IEntity entity);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        void Save(ITable table);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="force">是否强制同步到数据库。</param>
        void Save(ITable table,bool force);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="force">是否强制同步到数据库。</param>
        /// <param name="transaction">数据同步过程中是否使用事务。</param>
        void Save(ITable table, bool force, bool transaction);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        void Save(ISchema schema);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <param name="force">是否强制同步到数据库。</param> 
        void Save(ISchema schema, bool force);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <param name="force">是否强制同步到数据库。</param> 
        /// <param name="transaction">数据同步过程中是否使用事务。</param>
        void Save(ISchema schema, bool force, bool transaction);
        /// <summary>
        /// 插入数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Insert(IEntity entity);
        /// <summary>
        /// 修改数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Update(IEntity entity);
        /// <summary>
        /// 删除数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Delete(IEntity entity);
        /// <summary>
        /// 删除数据表。
        /// </summary>
        /// <param name="table">数据表。</param>
        /// <remarks>
        /// 本方法相当于数据批量删除,一次性删除多条记录。
        /// </remarks>
        /// <remarks>删除的记录数。</remarks> 
        int Delete(ITable table);
        /// <summary>
        /// 根据条件删除数据表中记录。
        /// </summary>
        /// <param name="table">数据表。</param>
        /// <param name="condition">数据过滤条件。</param> 
        /// <remarks>删除的记录数。</remarks>
        int Delete(ITable table, Condition condition);
        /// <summary>
        /// 删除数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <remarks>
        /// 本方法相当于数据批量删除,一次删除多表多条记录。
        /// </remarks> 
        void Delete(ISchema schema);        
        /// <summary>
        /// 刷新数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        /// <returns>数据库中存在指定的数据体则返回true。</returns>
        bool Refresh(IEntity entity);
        /// <summary>
        /// 查询数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        /// <returns>数据库中存在指定的数据体则返回true。</returns>
        bool Query(IEntity entity);
        /// <summary>
        /// 判读实体是否存在于数据库。
        /// </summary>
        /// <param name="entity">实体。</param>
        bool ExistsInDb(IEntity entity);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        void Query(ITable table);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        void Query(ITable table,int top);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        void Query(ITable table, Condition condition);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        void Query(ITable table, Condition condition, int top);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        DataTable GetDataTable(ITable table);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        DataTable GetDataTable(ITable table, int top);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        DataTable GetDataTable(ITable table, Condition condition);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        DataTable GetDataTable(ITable table, Condition condition, int top);
    }
}
 
ICacheAccessor完成ORM对象的缓存查询及其辅助任务,其接口详细定义如下:
    /// <summary>
    /// 缓存访问器接口。
    /// </summary>
    /// <remarks>
    /// 为ORM对象提供缓存查询能力。
    /// </remarks>
    public interface ICacheAccessor : IOrmEnvironment
    {
        /// <summary>
        /// 缓存刷新实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void CacheRefresh(IEntity entity);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        void CacheQuery(ITable table);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        void CacheQuery(ITable table, int top);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        void CacheQuery(ITable table, Condition condition);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        void CacheQuery(ITable table, Condition condition, int top);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        DataTable GetCacheDataTable(ITable table);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        DataTable GetCacheDataTable(ITable table, int top);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        DataTable GetCacheDataTable(ITable table, Condition condition);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        DataTable GetCacheDataTable(ITable table, Condition condition, int top);
    }

IOrmAccessor和ICacheAccessor都基于一个共同的接口IOrmEnvironment,IOrmEnvironment寓意为ORM操纵环境,根据类图可以看到IOrmAccessor和ICacheAccessor也坚决的继续于接口ISessionResource(会话资源),关我在后面的文章中专门介绍。
 
关于IOrmAccessor和ICacheAccessor详细方法和具体的实现思路我在本文暂时不做介绍,在AgileEAS.NET实现了基于本地数据访问器IDataAccessor的ORM实现,也实现了基于分布式WebService和Remoting的ORM访问器实现,在开发和使用过程中,同一实体对象可以在不同的ORM访问器中进行切换,只需要修改配置文件:
使用本地数据访问器:
<object name="MasterDbConnection" assembly="EAS.Data" type="EAS.Data.Access.OleDbConnection" LifestyleType="Singleton">
	<property name="ConnectionString" type="string" value="..." />
</object>
<object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton">
	<property name="DbConnection" type="object" value="MasterDbConnection" />
</object>
<object name="CacheAccessor" assembly="EAS.Data" type="EAS.Data.ORM.CacheAccessor" LifestyleType="Singleton">
</object>
使用基于WebService实现的分布式访问器:
<object name="MasterDataAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.DataAccessor" LifestyleType="Singleton">
	<constructor-arg index="0" type="string" value="http://vm2003/Distributed/DataAccessService.asmx" />
</object>
<object name="MasterRMIAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.RMIAccessor" LifestyleType="Singleton">
	<constructor-arg index="0" type="string" value="http://vm2003/Distributed/RMIService.asmx" />
</object>
<object name="OrmTranser" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.OrmAccessor" LifestyleType="Singleton">
	<property name="DataAccessor" type="object" value="MasterDataAccessor" />
	<property name="RMIAccessor" type="object" value="MasterRMIAccessor" />
</object>
下一篇文章我简单说一下数据实现和UI的绑带。
 
      QQ群:120661978,125643764


本文转自 agilelab 51CTO博客,原文链接:http://blog.51cto.com/agilelab/561910
相关文章
|
SQL 开发框架 数据库
".NET开发者的超能力:AgileEAS.NET ORM带你穿越数据库的迷宫,让数据操作变得轻松又神奇!"
【8月更文挑战第16天】AgileEAS.NET是面向.NET平台的企业应用开发框架,核心功能包括数据关系映射(ORM),允许以面向对象方式操作数据库,无需编写复杂SQL。通过继承`AgileEAS.Data.Entity`创建实体类对应数据库表,利用ORM简化数据访问层编码。支持基本的CRUD操作及复杂查询如条件筛选、排序和分页,并可通过导航属性实现多表关联。此外,提供了事务管理功能确保数据一致性。AgileEAS.NET的ORM简化了数据库操作,提升了开发效率和代码可维护性。
144 5
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
443 2
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
837 6
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
179 3
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
2351 1
|
SQL 开发框架 关系型数据库
值得推荐的.NET ORM框架
值得推荐的.NET ORM框架
397 0
|
开发框架 前端开发 JavaScript
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
360 0