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. 昨天冲动的搬到外面住了,oh yeah

    昨天我纠结了一天,我是否应该搬到外面去住.我骑着我的自行车,在外面闲逛,我心里想的是,我现在没有钱,可以节约一些生活费,租房的日子,我以后始终都是需要面对的,在目前没有那么多钱的情况下,可以不出去外面 ...

  2. 【转】傅盛:怎样做一个创业公司CEO?

    摘要 : 傅盛High聊会,泉灵姐姐给的命题作文.怎样做一个创业公司CEO,核心还是思维模式. 这次傅盛High聊会,泉灵姐姐给我的命题作文.创业要如何开始,本质还是思维模式.首先学会把一个开放式问题 ...

  3. JAXB - Annotations, Class Fields as Attributes: XmlAttribute

    Provided that XML lets you represent a data item as a single value, there is no cut-and-dried rule f ...

  4. postgresql crosstab 行转列函数

    http://blog.csdn.net/hexin373/article/details/19242833

  5. .net 文件操作

    一.DotNet文件目录常用操作: DiveInfo:提供了对逻辑磁盘的基本信息访问的途径.(只能查看信息,不能做任何修改.) System.Environment:用来枚举驱动器.(不能获取驱动器的 ...

  6. SQL Server 2012 中 Update FROM子句

    首先说明一下需求以及环境 创建Table1以及Table2两张表,并插入一下数据 USE AdventureWorks2012; GO IF OBJECT_ID ('dbo.Table1', 'U') ...

  7. Extjs4使用iframe注意事项

    "video" : { render : function(panel, eOpts) { // 因为iframe在video // panel渲染的时候就已经完全移动到video ...

  8. OC1_类与对象

    // // main.m // OC1_类与对象 // // Created by zhangxueming on 15/6/9. // Copyright (c) 2015年 zhangxuemin ...

  9. 《C和指针》

    <C和指针> static global varibale VS global variable static function VS normal function 数组变量 VS 字符 ...

  10. 霍纳法则(Horner's rule)

    卡在hdu 1402 的高精度乘法了,要用FFT(快速傅里叶变换),然后看到了这个霍纳法则,顺便就写下来了. 霍纳法则:求多项式值的一个快速算法. 简单介绍: 假设有n+2个数 , a0,a1,a2, ...