C#的ORM工具Dos.ORM使用介绍(配置成功,本人在用)

源码下载及学习文档地址:https://www.itdos.com/Dos/ORM/Index.html

一、介绍

        Dos.ORM(原名Hxj.Data)于2009年发布,2015年正式开源,该组件已在数百个成熟项目中应用,是目前国内用户量最大、最活跃、最完善的国产ORM。初期开发过程中参考了NBear与MySoft,吸取了他们的一些精华,加入新思想,后期参考EF的Lambda语法进行大量扩展。

       为什么使用Dos.ORM?选择Dos.ORM的理由:

  1.上手非常简单,0学习成本。使用方便,按照sql书写习惯编写C#代码。功能强大。

  2.轻量级,只有一个dll文件(不到200KB),相比于EF,NHibernate这些重量级的ORM框架,实在是太小。

  3.支持各种不同主流数据库,例如:SQL Server,MySql,Oracle,Sqlite,Access等等。

  4.高性能,接近手写sql

  5.支持Lambda表达式写法

  6.国产的优秀ORM框架,必须支持

二、使用方法

1、使用Dos.Tool-master编译生成实体生成工具,生成实体类;

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.42000
//     Website: http://ITdos.com/Dos/ORM/Index.html
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using Dos.ORM;

namespace Dos.Model
{
    /// <summary>
    /// 实体类cms_city。(属性说明自动提取数据库字段的描述信息)
    /// </summary>
    [Table("cms_city")]
    [Serializable]
    public partial class cms_city : Entity
    {
        #region Model
		private int _cityid;
		private int _provinceid;
		private string _cityname;
		private string _dialcode;

		/// <summary>
		/// 
		/// </summary>
		[Field("cityid")]
		public int cityid
		{
			get{ return _cityid; }
			set
			{
				this.OnPropertyValueChange("cityid");
				this._cityid = value;
			}
		}
		/// <summary>
		/// 
		/// </summary>
		[Field("provinceid")]
		public int provinceid
		{
			get{ return _provinceid; }
			set
			{
				this.OnPropertyValueChange("provinceid");
				this._provinceid = value;
			}
		}
		/// <summary>
		/// 
		/// </summary>
		[Field("cityname")]
		public string cityname
		{
			get{ return _cityname; }
			set
			{
				this.OnPropertyValueChange("cityname");
				this._cityname = value;
			}
		}
		/// <summary>
		/// 
		/// </summary>
		[Field("dialcode")]
		public string dialcode
		{
			get{ return _dialcode; }
			set
			{
				this.OnPropertyValueChange("dialcode");
				this._dialcode = value;
			}
		}
		#endregion

		#region Method
        /// <summary>
        /// 获取实体中的主键列
        /// </summary>
        public override Field[] GetPrimaryKeyFields()
        {
            return new Field[] {
				_.cityid,
			};
        }
        /// <summary>
        /// 获取列信息
        /// </summary>
        public override Field[] GetFields()
        {
            return new Field[] {
				_.cityid,
				_.provinceid,
				_.cityname,
				_.dialcode,
			};
        }
        /// <summary>
        /// 获取值信息
        /// </summary>
        public override object[] GetValues()
        {
            return new object[] {
				this._cityid,
				this._provinceid,
				this._cityname,
				this._dialcode,
			};
        }
        /// <summary>
        /// 是否是v1.10.5.6及以上版本实体。
        /// </summary>
        /// <returns></returns>
        public override bool V1_10_5_6_Plus()
        {
            return true;
        }
        #endregion

		#region _Field
        /// <summary>
        /// 字段信息
        /// </summary>
        public class _
        {
			/// <summary>
			/// * 
			/// </summary>
			public readonly static Field All = new Field("*", "cms_city");
            /// <summary>
			/// 
			/// </summary>
			public readonly static Field cityid = new Field("cityid", "cms_city", "");
            /// <summary>
			/// 
			/// </summary>
			public readonly static Field provinceid = new Field("provinceid", "cms_city", "");
            /// <summary>
			/// 
			/// </summary>
			public readonly static Field cityname = new Field("cityname", "cms_city", "");
            /// <summary>
			/// 
			/// </summary>
			public readonly static Field dialcode = new Field("dialcode", "cms_city", "");
        }
        #endregion
	}
}

2、ITdos-Dos.ORM-master项目编译生成Dos.ORM.dll、Dos.ORM.MySql.dll,引入项目

3、使用简单:

var db_orm = new DbSession(DatabaseType.MySql, "Data Source=127.0.0.1;Database=ourcms;User Id=root;Password=root;Convert Zero Datetime=True;Allow Zero Datetime=True;");
            var result = db_orm.From<cms_mobile>().Top(10).ToList();
            var result2 = db_orm.FromSql("select * from cms_mobile order by id limit 10").ToList<cms_mobile>();
            var result3 = db_orm.FromSql("select id from cms_mobile order by id limit 10").ToList<int>();

其他更详细的使用方式查看文档。

三、注意事项

1、Dos.ORM官网:https://www.itdos.com/Dos/ORM/Index.html

可以从官网提供的地址下载“Dos.ORM(原Hxj.Data)数据库组件”和“Dos.Tool代码生成器”

本人从https://github.com/itdos/Dos.ORM下载了Dos.orm,从https://github.com/itdos/Dos.Tool下载了Dos.Tool。

注意,下载的使用时用Dos.ORM.Standard版本,最好重新编译生成最新的Dos.ORM.dll、Dos.ORM.MySql.dll和Dos.Tool.exe,本人用下载的生成好的旧版本,出现了下图中的错误。

经检查试验原因为用新版本Dos.Tool.exe生成的实体类与原版本有差别引起

使用中还可能会用到MySql.Data.dll

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于面向对象、分层架构、ORM及反射+工厂设计模式等。支持.Net1.1及以上版本,可用于Oracle、SqlServer、Sybase、DB2、MySQL、Access、SQLite、PostgreSQL、DM(达梦)、PowerDesigner文件、Informix、Firebird、MaxDB、Excel等和OleDb、ODBC连接的数据库并可自定义,详见文档及安装文件的示例和工具的帮助文档。 关键字: VB/C#.Net实体代码生成工具 实体代码生成工具 EntitysCodeGenerate 预期读者: 软件开发及相关人员 难度等级: 中 当前版本: 4.3 目 录 1 引言 3 2 内容 4 2.1 ORM框架的实现:VB/C#.Net实体代码生成工具(EntitysCodeGenerate) 4 2.2 在开发中的实际应用 5 2.2.1 单个实体对象的数据库操作 6 1、获取一个实体对象信息 6 2、插入一个实体对象信息 6 3、更新一个实体对象信息 6 4、保存一个实体对象信息 6 5、删除一个实体对象信息 7 6、取得实体映射表数值字段的最大值+1 7 2.2.2 多个实体对象的数据库操作 7 1、实体集对象的使用 7 2、结合事务处理 7 2.2.3 数据查询及通用DML操作 9 1、 常用实体对象查询 9 2、 ORM结构化查询 9 (1)、Select查询 10 (2)、From连接查询 10 (3)、Where语句的Condition条件 11 (4)、Order By排序功能 11 (5)、Group By分组条件及排序 12 (6)、结合事务处理的功能 14 3、Delete删除 15 4、Update更新 15 5、Insert插入 16 2.2.4 DbCore+SQL/存储过程 17 1、DbCore+SQL 17 2、DbCore+存储过程 19 2.2.5 Extend辅助扩展功能 20 1、TableHelp辅助扩展 20 2、CommonHelp常用方法扩展 22 2.2.6 ORM的分析及与Xml的交互 22 1、ORM的分析 22 2、与XML的交互 23 3 结束语 23 4 相关下载地址 24 http://www.skycn.com/soft/53715.html http://download.enet.com.cn/html/030212009031901.html http://www.newhua.com/soft/98941.htm http://www.duote.com/soft/32643.html http://www.crsky.com/soft/25626.html http://download.csdn.net/source/3030634 http://qun.qq.com/air/#60873348/share http://blog.csdn.net/chutao http://lxchutao.blog.163.com http://hi.baidu.com/lxchutao http://download.enet.com.cn/eblog/blog/htm/uid_21280.html
对象关系映射架构(DBFramework)及代码生成器源码 一、使用对象关系映射组件Kenly.DBFramework.dll不用编写任何SQL或者存储过程即可实现下列功能: 1、数据表、视图和存储过程与对象之间的转换。 2、数据表、视图的自定义条件查询。 3、数据表、视图的分页查询。 4、根据ID、主键或自定义条件对数据表进行增、删、改操作。 5、实现一对一、一对多、多对一和多对多的关系映射。 6、支持单个对象和多个对象之间的事务控制。 7、支持查询结果排序。 8、支持查询表达式生成。 9、支持延迟加载。 二、代码生成器 1、根据指定的数据库连接,自动生成数据表、视图和存储过程对应的对象代码(C#代码)。 2、自动生成相关的工程文件,生成完整的业务层项目文件。 3、可以帮助生成自定义查询方法。 4、支持SQLServer2000、SQLServer2005和Oracle代码生成插件,支持插件扩展。 提供 1、对象关系映射组件: Kenly.DBFramework.dll 2、代码生成器源码:CodeHelper。 3、代码生成器插件源码(支持SQLServer2000、SQLServer2005和Oracle):Plugin。 4、使用手册:DBFramework.Manual V4.5.3.pdf。 主要API: public abstract class ViewGateway where T: new() { // Methods static ViewGateway(); protected ViewGateway(); protected static int Count(); protected static int Count(string condition); protected static List CountGroup(string groupBy); protected static List CountGroup(string condition, string groupBy); public static List CreateInstances(int count); protected static List Distinct(string columnName); protected static List Distinct(string columnName, string condition); protected static List Distinct(string columnName, string condition, bool ignoreNull); protected static bool Exists(string condition); public bool ExistsById(); public bool ExistsByPK(); protected static List Find(PagingArg pagingArg, params string[] propertyNames); protected static List Find(string condition, params string[] propertyNames); protected static List Find(PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static List Find(string condition, PagingArg pagingArg, params string[] propertyNames); protected static List Find(string condition, PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static List FindAll(params string[] propertyNames); protected static void FindTop(T firstOne); protected static List FindTop(int topCount, params string[] propertyNames); protected static void FindTop(string condition, T firstOne); protected static List FindTop(string condition, int topCount, params string[] propertyNames); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); protected void InitializeInstance(T entity); protected static object Max(string columnName); protected static object Max(string columnName, string condition); protected static List MaxGroup(string columnName, string groupBy); protected static List MaxGroup(string columnName, string condition, string groupBy); protected static object Min(string columnName); protected static object Min(string columnName, string condition); protected static List MinGroup(string columnName, string groupBy); protected static List MinGroup(string columnName, string condition, string groupBy); protected static DataTable Query(PagingArg pagingArg, params string[] propertyNames); protected static DataTable Query(string condition, params string[] propertyNames); protected static DataTable Query(PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static DataTable Query(string condition, PagingArg pagingArg, params string[] propertyNames); protected static DataTable Query(string condition, PagingArg pagingArg, bool sqlServer2000, params string[] propertyNames); protected static DataTable QueryAll(params string[] propertyNames); protected static DataTable QueryTop(int topCount, params string[] propertyNames); protected static DataTable QueryTop(string condition, int topCount, params string[] propertyNames); public ArrayList RetrieveAssociations(); public ArrayList RetrieveAssociations(Type elementType); public ArrayList RetrieveAssociations(params Type[] elementTypes); public void RetrieveById(); public void RetrieveByPK(); protected internal virtual void RetrieveBySql(string sql); public void ShadowCopyTo(object targetEntity); public void ShadowCopyTo(T targetEntity); protected static double Sum(string columnName); protected static double Sum(string columnName, string condition); protected static List SumGroup(string columnName, string groupBy); protected static List SumGroup(string columnName, string condition, string groupBy); public static string ToColumnName(string propertyName); public static T ToObject(DataRow adaptedRow); public static List ToObjects(DataTable adaptedTable); public static List ToObjects(DataRow[] adaptedRows); public static string ToPropertyName(string columnName); public static DataTable ToTable(IList entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static DataTable ToTable(bool isAdapted, IList entities); // Properties protected internal static string CommandText { get; } protected internal static GatewayConfig Config { get; } internal T Entity { get; set; } public object EntityId { get; } public object PrimaryKey { get; } protected static Order SortedOrder { get; set; } } public abstract class TableGateway : ViewGateway where T: TableGateway, new() { // Methods static TableGateway(); protected TableGateway(); public int AddNew(); public static int AddNew(IList entities); public static int AddNew(T entity); public int AddNew(bool returnIdentity); public static int AddNew(T entity, bool returnIdentity); public static int AddNew(IList entities, out Transaction transaction); public static int AddNew(IList entities, bool returnIdentity); public static int AddNew(T entity, out Transaction transaction); public static int AddNew(IList entities, bool returnIdentity, out Transaction transaction); public static int AddNew(T entity, bool returnIdentity, out Transaction transaction); public IDbTransaction BeginTransaction(); public IDbTransaction BeginTransaction(IsolationLevel isolationLevel); public IDbTransaction BeginTransaction(double activeTime); public IDbTransaction BeginTransaction(IsolationLevel isolationLevel, double activeTime); public bool Commit(); protected static int Delete(string condition); protected static int Delete(string condition, out Transaction transaction); public int DeleteById(); public static int DeleteById(T entity); public static int DeleteById(IList entities); public static int DeleteById(IList entities, out Transaction transaction); public static int DeleteById(T entity, out Transaction transaction); public int DeleteByPK(); public static int DeleteByPK(T entity); public static int DeleteByPK(IList entities); public static int DeleteByPK(IList entities, out Transaction transaction); public static int DeleteByPK(T entity, out Transaction transaction); protected void OnPropertyChanged(MethodBase propertyMethod); protected void OnPropertyChanged(string propertyName); protected internal override void RetrieveBySql(string sql); public bool Rollback(); protected static int Update(T entity, string condition); protected static int Update(T entity, string condition, out Transaction transaction); public int UpdateById(); public static int UpdateById(IList entities); public static int UpdateById(T entity); public static int UpdateById(T entity, out Transaction transaction); public static int UpdateById(IList entities, out Transaction transaction); public int UpdateByPK(); public static int UpdateByPK(IList entities); public static int UpdateByPK(T entity); public static int UpdateByPK(IList entities, out Transaction transaction); public static int UpdateByPK(T entity, out Transaction transaction); // Properties public bool Changed { get; } public List ChangedPropertyNames { get; } } public class StoredProcedure : IStoredProcedure { public bool BeginTransaction(); public void CloseReader(IDataReader reader); public bool Commit(); public DataSet ExecuteDataSet(); public DataTable ExecuteDataTable(); public DataTable ExecuteDataTable(); public List ExecuteEntity(); public int ExecuteNonQuery(); public IDataReader ExecuteReader(); public object ExecuteScalar(); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); protected void InitializeInstance(T entity); public bool Rollback(); } public class AggregateEntity where T: AggregateEntity, new() { public static List Execute(); protected static List Execute(string condition); public static DataTable ExecuteDataTable(); protected static DataTable ExecuteDataTable(string condition); protected static void InitializeGateway(GatewayConfig config); protected static void InitializeGateway(DatabaseType dbType, string connectionString); // Properties protected static Order SortedOrder { get; set; } } public static class EntityMapper { // Methods public static void AdaptToDatabase(DataTable adaptedTable); public static void AdaptToEntity(DataTable rawTable); public static void CopyToEntities(IList entities, IList adaptedRows); public static void CopyToEntities(IList entities, DataTable adaptedTable); public static void CopyToEntity(T entity, DataRow row); public static List CreateEntities(int count); public static DataTable CreateTable(); public static DataTable CreateTable(bool isAdapted); public static string ToColumnName(string propertyName); public static List ToEntities(IList adaptedRows); public static List ToEntities(DataTable table); public static T ToEntity(DataRow adaptedRow); public static string ToPropertyName(string columnName); public static DataTable ToTable(IList entities); public static DataTable ToTable(params T[] entities); public static DataTable ToTable(bool isAdapted, params T[] entities); public static DataTable ToTable(bool isAdapted, IList entities); } public static class EntityUtility { // Methods public static List Inherit(IList entities); public static T Inherit(object entity); public static T Inherit(Tbase baseEntity, TransformAction method); public static List Inherit(IList baseEntities, TransformAction method); public static void ShadowCopy(IList targetEntities, IList sourceEntities); public static void ShadowCopy(object targetEntity, object sourceEntity); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值