ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的。它到底是个什么东西呢,我们先来看看一些对它的含义解释。

对象/关系数据库映射(object/relational mapping(ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去。ORM,即Object- Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的 SQL语句打交道,只要像平时操作对象一样操作它就可以了。
   对象关系映射(ORM)提供了概念性的、易于理解的模型化数据的方法。ORM方法论应当基于三个核心原则:
   简单:以最基本的形式建模数据。
   传达性:数据库结构被任何人都能理解的语言文档化。
   精确性:基于数据模型创建正确标准化了的结构。

基于三项原则,一方面,建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发企业实体模型,业务实体的设计者也可以在完全脱离数据结构
构架的基础上应用这些业务实体并构筑企业的应用系统。另一方面我们可以将那些简单而又枯草地SQL语句完全忘却,在ORM的构架中,它们对于建模者应用来
说完全是多余的。

  下面我们来做一个使用ORM的实际例子:

  一、在Web.config文件中配置连接数据库字符串。

<connectionStrings>
    <add name="connectionString" connectionString="data source=219.90.127.39,11433;Initial Catalog=Casino;User Id=sa;Password=sZ123456;Max Pool Size=512; Min Pool Size=5" providerName="System.Data.SqlClient" />
  </connectionStrings>

  二、在Global.asax.ca中,执行项目启动最初始阶段,进行连接数据库命令的ConnectionString语句。

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

ThePart.DataHelper.ORM.ORMBase.AddDataHelper("Casino", ThePart.DataHelper.Enum.DBType.SQL,
                System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

  三、创建实体类基础ORMBase对象关系型数据库映射的基类。

       "数据库名",    "表名"    ,"主键","标识列字段"

[TableInfo("Casino","AgencyStatisticsRecords","ID","ID")]
    public class AgencyStatisticsRecords:ORMBase
    {
        public int ID { get; set; }

public string AccountTime { get; set; }

public string AgentName { get; set; }
        public decimal TotalStakeScore { get; set; }
        public decimal TotalWinLost { get; set; }
        public int UserName { get; set; }
        public int? SaleID { get; set; }
    }

  四、业务方法,对象映射关系数据库——表数据,获得数据对象。这里直接使用--------- 实体类.GetInfo<实体类>("需要查询的实体中的字段","查询条件",new object[]{});   这里new object[]{}是多个参数作为对象数组,传入数据库中。

  public string GetUserAgency()
        {
            string body = null;

StringBuilder strB = new StringBuilder();
            strB.Append("SELECT ID ,AccountTime ,AgentName ,TotalStakeScore,TotalWinLost ,UserName ,SaleID  FROM AgencyStatisticsRecords where ID='17'");

var agency = AgencyStatisticsRecords.GetInfo<AgencyStatisticsRecords>("ID ,AccountTime ,AgentName ,TotalStakeScore,TotalWinLost ,UserName ,SaleID", "ID='17'",new object[]{});

body ="{\"AgentName\":\""+agency.AgentName+"\",\"DateTime\":\""+agency.AccountTime+"\"" +"}";
            return  body;
        }

  五、ThePart.DataHelper.ORM.ORMBase这个对象关系映射基类,对数据库进行增删改查时的返回值有多种灵活的值形态。下面我们做一些总结以便我们以后的灵活应用:

  1.直接返回DataTable——这个是最最灵活的,不必返回的数据字段,必须是实体类的字段。因为它的形态是DataTable。不是实体对象。所以SQL查询的方式更加灵活。可以是SUM(),count(),或者是在查询的过程中新生成的字段或表。例如:下面返回的DataTable字段跟BetRecords类字段没有什么关系。DataTable.Rows[0]["sumWinLost"]这个

新生的输赢统计字段取值。

/// <summary>
        /// 获取用户时间段内的输赢统计
        /// </summary>
        /// <param name="SaleNo"></param>
        /// <param name="UserName"></param>
        /// <param name="StartDate"></param>
        /// <param name="EndDate"></param>
        /// <returns></returns>
        public static DataTable GetUserSumWin(string SaleNo, string UserName, DateTime StartDate, DateTime EndDate) {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select ISNULL( SUM(WinLost),0) as  sumWinLost from BetRecords ");
            string condition = " where UserName ='" + UserName + "' and SaleID = '" + SaleNo + "' and [DateTime] between '" + StartDate + "' and '"+EndDate+"'";
            strSql.Append(condition);

return BetRecords.ExecSQLDataTable("Casino",strSql.ToString(),new object[]{});
        }

  2.返回泛型类实体集合List<T>——这里需要映射的实体类,并且从数据库查询的字段名必须要与实体类的字段名称一样,能够匹配。例如:

public static List<SportsBetRecords> SportsGetList(string SaleID, string UserName, string classtype, string StarTime, string EndTime)
        {
            StringBuilder sb = new StringBuilder("1=1 and SaleID='" + SaleID + "'");    //这里声明了可变字符串类型,用来装载和追加where后面的查询条件
            if (!string.IsNullOrEmpty(UserName))
            {
                sb.Append(" and UserName='" + UserName + "'");
            }
            //if (!string.IsNullOrEmpty(classtype))
            //    sb.Append(" and GameName='" + classtype + "'");
            if (!string.IsNullOrEmpty(StarTime) && !string.IsNullOrEmpty(EndTime))
                sb.Append(" and [T] between '" + Convert.ToDateTime(StarTime) + "' and '" + Convert.ToDateTime(EndTime).AddDays(1) + "'");

    //实体类.GetList<实体类>("Where后面的条件","条件参数作为对象数组")——进过DataBase基类封装的GetList<T>()方法里面的一系列处理将where条件和后面的参数对象数组传给数据库作为条件
            return SportsBetRecords.GetList<SportsBetRecords>(sb.ToString(), new object[] { });
        }

ORMBase对象/关系型数据库映射在MVC中的应用的更多相关文章

  1. ORMBase对象/关系型数据库映射在MVC中的应用(二)

    3.DataBase基类,查询方法返回值是List<T>,并且是分页的,ThePart.dll版本2.0中封装了一个PageInfo类,作为分页的类型.这种方法很机械,也很狗血..建议大家 ...

  2. 对象关系型数据库管理系统(PostgresQL )

    PostgresQL是   对象关系型数据库管理系统(ORDBMS).PostgreSQL支持大部分SQL标准并且提供了许多其他现代特性:复杂查询.外键.触发器.视图.事务完整性.MVCC.同样,Po ...

  3. SQLite vs MySQL vs PostgreSQL:关系型数据库比较

    自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...

  4. [置顶] Nosql笔记(一)——关系型数据库回顾

    Nosql笔记(一)——关系型数据库回顾 在平常的商业应用中,我们所使用的大多都是关系型数据库,诸如SQL  Server. MY SQL. Oracle等. 关于关系型数据库中的关键技术: 存储引擎 ...

  5. NodeJS旅程 : express - nodejs MVC 中的王牌

    express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...

  6. 非关系型数据库Nosql的优缺点分析

    Nosql的全称是Not Only Sql,Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的mysql,oralce.sqlserver等一样,这些数据库一般用来存储重要信 ...

  7. Daject初探 - 一个开源关系型数据库对象关系映射(ORM)模型

    Daject简介 Daject是用php写的一个关系型数据库抽象模型,通过该模型,可以在不写任何SQL或写很少的SQL就能执行大多数数据库查询操作.Daject具有面向对象,跨数据库的优点,通过数据库 ...

  8. MVC 中的Model对象

    最近实在是太忙,客户丢了一个框架,没有任何说明文档,更没有所谓的技术支持,一直忙于学习,最后好歹还有点头绪,话不多说,MVC的学习是不能拉下的,就当前小白的我,认为MVC中的M并不是想象中的那样简单, ...

  9. ORM对象关系型映射的用法

    ORM对象关系型映射的用法 -- Django模型 1.什么是ORM关系型映射 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数 ...

随机推荐

  1. Yii2查询语句使用不等于号

    Yii2 Active Record查询条件使用不等于号,需要使用到 operator format: [operator, operand1, operand2, ...] 运算符格式: [运算符, ...

  2. webbroswer 后台注入脚本 的方法

    HtmlElement script = webBrowser.Document.CreateElement("script"); script.SetAttribute(&quo ...

  3. PHP之文件的锁定、上传与下载

    小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚 ...

  4. 搭建高可用的MongoDB集群

    http://www.csdn.net/article/2014-04-09/2819221-build-high-avialable-mongodb-cluster-part-1/1 在大数据的时代 ...

  5. ASP.NET网络硬盘(文件上传,文件下载)

    文件上传: 界面: 前台代码: <body style="text-align: center; background-image: url(Images/bg6.bmp);" ...

  6. GWT环境搭建--eclipse

    上面下来需求,需要用到GWT,以前没接触过,搭个开发环境研究研究 安装软件我放在百度云盘里了(其他版本自己找,我的版本 eclipse4.4 luna  gwt2.7) 链接:http://pan.b ...

  7. 【转】Open Live Writer 插件更新

    一.更新内容 cnblog 页签中增加 Lua 和 Matlab 语法高亮:(SyntaxHighlight 页签中尚未添加) 增加折叠区域插件,见效果展示: 增加 bat 执行文件,直接拷贝插件所需 ...

  8. SQL SERVER 锁定的实例

    ---实例DB:AdventureWorks2014 --- 创建view DBLocks USE [AdventureWorks2014] GO /****** Object: View [dbo] ...

  9. 创建image对象

    Image是一个抽象列,BufferedImage是Image的实现. Image和BufferedImage的主要作用就是将一副图片加载到内存中. Java将一副图片加载到内存中的方法是: Stri ...

  10. Requirejs开篇

    前言 随着页面的内容丰富,以及网站体验更好.性能优化等,原有的通过script标签引入JavaScript脚本的方式已经不能很好地解决,此时新的一种JavaScript加载方式产生了--延时加载.执行 ...