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. 【转】monkeyrunner学习总结二:连接、安装、启动

    一.获取packageName与startActivity 前置条件:已成功安装配置SL4A并连接PC调试(参见:monkeyrunner学习总结一:环境搭建:http://www.amsoft.cn ...

  2. HTTP层 —— 响应

    1.创建响应 字符串&数组 所有路由和控制器都会返回一个被发送到用户浏览器的响应,Laravel 提供了多种不同的方式来返回响应,最基本的响应就是从路由或控制器返回一个简单的字符串,框架会将这 ...

  3. ACM——Quicksum

    Quicksum 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:615            测试通过:256 描述 A chec ...

  4. 【HTTPS】Https和SSL学习笔记(一)

    1. 什么是HTTPS 在说HTTPS之前必须要先说一下HTTP.我们平常浏览网页用的就是HTTP协议,HTTP协议之间传输的数据都是明文,这样对于一些敏感信息传输其实是不安全的,很容易被恶意窃取.应 ...

  5. Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库

    一.jsp部分 只要是与页面显示相关的都是重点 1.jsp的脚本 <%java代码%>:被翻译到service方法内部,局部变量,局部的功能 <%=表达式或变量%>:翻译成se ...

  6. 将博客搬迁至CSDN

    CSDN不给我搬家就算了....我自己搬= = http://blog.csdn.net/ourfutr2330

  7. ubuntu16.04无法连接无线的问题解决方式以及QQ的安装

    0x01 首先我是安装了win10与ubuntu16.04的双系统,不过遇到的问题有启动项与无线连接的问题,今天说一下联网的问题. 连接宽带是正常的,只需要操作sudo pppoeconf 这条命令即 ...

  8. OpenJudge / Poj 2141 Message Decowding

    1.链接地址: http://poj.org/problem?id=2141 http://bailian.openjudge.cn/practice/2141/ 2.题目: Message Deco ...

  9. C#语法需要注意的地方

    笔试中遇到的一些C#语法方面的问题,由于平时很少用到,笔试的时候模棱两可,现在做一个笔记. using System; using System.Collections.Generic; using ...

  10. Huffman Coding 哈夫曼编码

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4096079.html 使用优先队列实现,需要注意以下几点: 1.在使用priority_qu ...