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. kettle中Get Data from XML , Jason Input , 文本文件输入 使用示例

    1.Get Data from XML xml文件内容: <head> <img id="1">菜||焦溜丸子||2013-03-28/image/0/00 ...

  2. cocos2d-x实战 C++卷 学习笔记--第4章 使用标签

    前言: 介绍cocos2d-x中 标签类. cocos2d-x中 标签类 主要有三种:LabelTTF, LabelAtlas, 和 LabelBMFont.此外,在Cocos2d-x 3.x之后推出 ...

  3. 轮子来袭 vJine.Core Orm 之 02_代码生成

    1.下载并安装动软代码生成器: 2.下载vJine.Core.Orm模板: 3.解压模本文件并复制到如下的动软代码生成器模板目录: 4.打开动软代码生成器会看到模板已识别加载: 5.选择模板代码批量生 ...

  4. 轮子来袭 vJine.Core Orm 之 01_快速体验

    vJine.Core 是.Net环境下C#类库,在其包含的众多功能中ORM功能尤为突出,现简介如下. 一.支持的数据库: SQLite, MySQL, MS SQL, Oracle. 二.使用方法: ...

  5. Linux网络服务器epoll模型的socket通讯的实现(一)

    准备写一个网络游戏的服务器的通讯模块,参考网上看到的一些代码,在linux下面实现一个多线程的epoll模型的socket通讯的代码,以下是第一部分多线程的切换代码: 1 #include <s ...

  6. [翻译][MVC 5 + EF 6] 12[完结]:高级场景

    原文:Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application 1.执行原生SQL查询: EF Code First API ...

  7. JS的词法作用域

    词法作用域定义实现的规则: 1 函数作用域实在定义的时候决定的,而不是在执行时候决定 2 为了实现这种词法作用域,函数内部不仅包含函数代码逻辑,还必须引用当前的作用域链. 3 函数对象可以通过作用域链 ...

  8. os.walk获取同级目录具有随机性

    1.在不同机器上,相同内容的目录和文件,os.walk获取结果中路径的先后顺序具有随机性. 2.查看os.walk源码得知,listdir具有随机性. 3.修改该源码,对listdir结果排序后,使得 ...

  9. mysql查询语句分析 explain用法

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了,如: explai ...

  10. CSS弹性盒模型 box-flex

    目前没有浏览器支持boc-flex属性. Firefox支持代替的-moz-box-flex属性 Safari.Opera以及Chrome支持替代的-webkit-box-flex属性 box-fle ...