澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:dotNet下的一套化解方案

  很久没在博客园写文章了,打算把一直由自己一个人写的一整套系统开放出来,今天先放一些截图及可以演示的地址!

dotNet下的一套解决方案,dotNet解决方案

  很久没在博客园写文章了,打算把一直由自己一个人写的一整套系统开放出来,今天先放一些截图及可以演示的地址!

这套系统包含数据层(HB.Data)、计划任务(HB.PlanTask)、日志系统(HB.Log)、模版系统(HB.TemplateEngine)、Url重写(HB.UrlRewriter)、api(HB.ApiControls)等。

  为什么要写数据层呢?现成的ORM不是一大堆吗,为什么还要自己写?多年前,dotNet里并没有什么ORM,很多东西都只能自己写,慢慢的数据层功能也就越来越强大了,

可以通过实体类来生成数据库中的表,也可以通过数据库中的表来生成数据库,并且支持多中数据库,比如Sql Server、Access、Sqlite、Oracle、MySql等。数据层有通用的增删改查方法,并且支持参数化的写法,实体类里还有表达式的写法(注:表达式的写法暂时支持不完善)!

  Url重写的主要改进是支持通过数据库来配置域名及重写规则,并且支持多域名的形式。比如说我只买了一个空间,但是我有好几个网站,该功能就可以实现一个空间上就可以做多个网站的功能!您可以试一试www.8fdc.com、www.54rm.com、www.5wshop.com,看到的结果都是不一样的,因为重写了路径,www.8fdc.com实际上是进入的站点下8fdc.com/www/ 下的,依次类推,当然这个是可以通过数据库来配置。

  api的功能主要实现了参数自动匹配,直接在后台类中写方法,以 /api/类名前缀/方法名称.ashx 的形式进行访问。

     先直接上整套系统的图片把,看看反响,在最后面开放网站后台演示地址!

 

澳门新浦京娱乐场网站 1

澳门新浦京娱乐场网站 2

澳门新浦京娱乐场网站 3

澳门新浦京娱乐场网站 4

澳门新浦京娱乐场网站 5

澳门新浦京娱乐场网站 6

澳门新浦京娱乐场网站 7

澳门新浦京娱乐场网站 8

澳门新浦京娱乐场网站 9

澳门新浦京娱乐场网站 10

澳门新浦京娱乐场网站 11

澳门新浦京娱乐场网站 12

澳门新浦京娱乐场网站 13

澳门新浦京娱乐场网站 14

澳门新浦京娱乐场网站 15

澳门新浦京娱乐场网站 16

澳门新浦京娱乐场网站 17

 

后台地址: 

帐号:test  密码:123456  

 

很久没在博客园写文章了,打算把一直由自己一个人写的一整套系统开放出来,今天先放一些截图及...

欢迎使用 PDF.NET 数据开发框架
(Ver 4.0)

PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的。下面我们就采用流行的 Code First的方式,一步步来了解下。

这套系统包含数据层(HB.Data)、计划任务(HB.PlanTask)、日志系统(HB.Log)、模版系统(HB.TemplateEngine)、Url重写(HB.UrlRewriter)、api(HB.ApiControls)等。

关于框架的名字由来

         在我设计www.pwmis.cn 站点(原域名已经过期,现在正准备使用新域名 )的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经验的基础上,设计了 一套全新的快速数据处理框架 PWMIS Data development Framework,简称PDF。本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格,设计了 OQL查询表达式。本框架的设计思想是通用的,完全可以移植到Java 平台,现在只提供了.NET平台的实现,暂且将本框架命令为

PDF.NET

(下载 )

一、准备工作

  为什么要写数据层呢?现成的ORM不是一大堆吗,为什么还要自己写?多年前,dotNet里并没有什么ORM,很多东西都只能自己写,慢慢的数据层功能也就越来越强大了,

框架支持的功能

  • UI层(WinForm/Web)控件数据绑定、映射与查询;
  • BLL层实体对象查询(OQL)
  • DAL层SQL语句和.NET数据访问代码映射(查看 SQL-MAP 原理)

详细说来,框架还包含以下特色功能:

  • 类似LINQ的支持ORM实体类查询的OQL表达式(有了LINQ为啥还要搞一个OQL?本框架 OQL的基本设计在LINQ或者说本人知道 LINQ之前,另外,.NET3.5框架才正式支持LINQ,而我们公司的一个产品却因为采用了3.5框架安装部署不方便成为市场和客服常常抱怨的理由。 未来还有这样的理由,我们迫切需要一个类似LINQ的东西运行在某些客户过时的机器上。 )
  • 无需任何后台代码即可分页的增强数据分页控件。
  • 只需要一行代码实现页面数据的增,删,改,查。
  • 基于SQL词法分析的支持多种数据库的高效分页类,你只需要设置SQL语句和分页属性它便能够为你生成特定数据库平台的当前页数据的SQL语句。
  • 一套实用工具,可以生成实体类和根据SQL配置文件自动生成代码的代码生成器以及SQL配置文件管理程序。
  • 更多的功能等待你去发现:)

1.1,添加SOD包引用

首先建立一个控制台项目(支持.NET2.0的项目),并使用程序包管理器添加PDF.NET SOD的程序引用:

PM> Install-Package PDF.NET.SOD

更多详细使用信息说明,请参考nuget 网站说明

可以通过实体类来生成数据库中的表,也可以通过数据库中的表来生成数据库,并且支持多中数据库,比如Sql Server、Access、Sqlite、Oracle、MySql等。数据层有通用的增删改查方法,并且支持参数化的写法,实体类里还有表达式的写法(注:表达式的写法暂时支持不完善)!

与其它数据处理框架的关系

        本框架是总结多种数据处理框架的优点,去除其复杂性后的轻量级的数据处理框,所以可能没有你熟知的下列重量级框架强大的功能。本框架的设计目标是 轻量,快速,通用,易学 !

  • Hibernate:借鉴了它的ORM原理和HQL语言,使用了类似的简单的ORM功能;
  • iBatis:借鉴了其SQL-MAP功能,对其复杂性进行了大力精简;
  • LINQ/Entity Framework:提供类似LINQ的OQL语法

1.2,配置数据连接

新建一个控制台项目,添加一个应用程序配置文件,增加一个数据库连接配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="local" connectionString="Data Source=.;Initial Catalog=LocalDB;Integrated Security=True" providerName="SqlServer" />
    </connectionStrings>
</configuration>

上面的连接字符串要求你本地已经安装SqlServer,框架兼容2000以上所有版本,有一个数据库名字是 LocalDB。当然你也可以修改成你实际的连接字符串。

之后,我们的查询示例,都将采用这个连接配置。

注意:最新版本的SOD框架,如果使用的是SqlServer,并且连接字符串指定了数据库名字但实际上没有这个数据库,框架可以自动创建数据库,此功能需要SOD的Code First功能支持,请参考下面“1.5 ,创建数据库表”的功能。

SOD框架最基本的配置,仅需要这一个地方,这比起EF来说要简单。

如果是SqlServer EF Code First方式的连接配置,SOD框架也可以使用它这个连接字符串的。

  Url重写的主要改进是支持通过数据库来配置域名及重写规则,并且支持多域名的形式。比如说我只买了一个空间,但是我有好几个网站,该功能就可以实现一个空间上就可以做多个网站的功能!您可以试一试www.8fdc.com、www.54rm.com、www.5wshop.com,看到的结果都是不一样的,因为重写了路径,www.8fdc.com实际上是进入的站点下8fdc.com/www/ 下的,依次类推,当然这个是可以通过数据库来配置。

框架功能演示

  • 表单数据绑定,分页显示--
  • 数据映射,查询--
  • SQL-MAP演示(请查看DAL层代码)--
  •  OQL查询(演示请看TestSqlMapEntity 项目)
  • 支持工具,提供代码生成器和SQLMAP配置文件管理程序--(请看解决方案Tools目录)

1.3,定义实体类

我们将使用最常见的用户登录来举例,这里需要一个用户实体类,假设它的定义是下面这个样子的:

澳门新浦京娱乐场网站 18澳门新浦京娱乐场网站 19

public class User : EntityBase
    {
        public User()
        {
            TableName="Tb_User";
            IdentityName = "UserID";
            PrimaryKeys.Add("UserID");
        }

        public int ID
        {
            get { return getProperty<int>("UserID"); }
            set { setProperty("UserID", value); }
        }

        public string Name
        {
            get { return getProperty<string>("Name"); }
            set { setProperty("Name", value, 50); }
        }

        public string Pwd
        {
            get { return getProperty<string>("Pwd"); }
            set { setProperty("Pwd", value, 50); }
        }

        public DateTime RegistedDate
        {
            get { return getProperty<DateTime>("RegistedDate"); }
            set { setProperty("RegistedDate", value); }
        }

    }

View Code

在上面的定义中,构造函数内指明了 IdentityName = "UserID";这表示当前实体类对应的表有一个叫做 UserID的自增列,每当插入实体类后,可以通过该自增列对应的属性获取到新插入的自增ID的值。

另外,我们发现每个实体类的属性中,都是这样的写法:

    public int ID
        {
            get { return getProperty<int>("UserID"); }
            set { setProperty("UserID", value); }
        }

属性内 getProperty ,setProperty 方法内的第一个参数,就是属性对应的字段名字。
所以,这样的属性,SOD框架称为“持久化属性”。

可以看到,SOD实体类还是比较简单的,它没有使用特性来申明数据库信息,这意味着你可以在运行时修改实体类影射的主键,自增字段,表名称等数据库元数据,并且不需要反射,这些特性构成了SOD框架简单而强大的基础。

  api的功能主要实现了参数自动匹配,直接在后台类中写方法,以 /api/类名前缀/方法名称.ashx 的形式进行访问。

框架的适用条件

  • 首先你是懒人或者菜鸟,大牛请绕道;
  • 其次,你很喜欢平民化的技术,不是那种非MS等大厂提供的框架不用的技术狂热人士;
  • 最后,如果老板把你逼急了,建议你使用本框架,当然之前你得先熟悉它,本人就是在这种情况下不顾项目经理的反对私自使用这套框架的,算是本框架的第一次商业项目的使用。(我一人完成了项目3/4的代码开发,另外两个人只写了1/4,项目经理最后才没话说)

1.4,添加查询对象的数据上下文

在项目中添加一个 LocalDbContext.cs 文件,文件中添加如下代码,以便检查表 Tb_User 是否存在,如果不存在,则自动创建一个:

/// <summary>
 /// 用来测试的本地SqlServer 数据库上下文类
 /// </summary>
  public class LocalDbContext : DbContext
  {
      public LocalDbContext()
          : base("local") 
      {
          //local 是连接字符串名字
      }

      #region 父类抽象方法的实现

      protected override bool CheckAllTableExists()
      {
          //创建用户表
          CheckTableExists<User>();
          return true;
      }

      #endregion
   }

本例中使用SqlServer 作为查询示例,程序会自动使用 SqlServerDbContext 密封类来进行内部协作处理,但这取决于你的AdoHelper实例类型,如果是Oracle,则内部使用的是OracleDbContext 密封类。

如果你不需要ORM的 Code First功能,这个 DbContext 实现类是不需要写的。

     先直接上整套系统的图片把,看看反响,在最后面开放网站后台演示地址!

框架使用的限制条件

1.5,创建数据库表

OK,基本准备就绪,现在Main 方法里面可以写下面的代码开始工作了:

LocalDbContext context = new LocalDbContext();//自动创建表

准备工作全部完成,运行这一句代码,之后查看SqlServer管理工具,发现表 Tb_User 已经创建了。

澳门新浦京娱乐场网站 20

 

许可限制

       首先,请尊重本框架的版权,本人可以有条件的开放本框架的部分或者全部源码,如果你获取了源码你可以自由对其修改但不可以修改本框架的名称和版权归属,你 不可以将原始源码或者修改后的源码分发给任何第三方,如果你修改后,请向本人发送一份。如果你未从官方获得本框架的源码 ,未经许可,不得使用任何工具对本框架反向工程查看和修改源码。任何组织和个人都可以将本框架使用于任何商业项目,可以免费使用本框架官方发布的最终 DLL库和相关工具,但你有义务向本人告知你使用本框架的基本信息,比如公司名称,项目名称,项目技术信息等。本人不对你使用本框架造成的任何损失承担任 何责任。如果你不同意上述条款,请勿使用本框架!

技术限制

       当前版本基于.NET2.0以上平台,不支持实体对象对应的数据库表外键关系,OQL表达式不支持多实体类查询,不支持SQL的统计求和分组等,如有这些 复杂查询需求,请使用SQL-MAP技术。SQL-MAP 配置文件不支持多个配置文件,但你可以将配置文件以嵌入式文件分散到多个DAL项目中。数据访问已经内置了 SqlServer,OleDb,ODBC,Oracle,SQLite等,如果你想提供其它数据库类型的访问,可以使用OleDb或者ODBC方式,或 者继承本框架的数据访问类开发专用数据访问提供程序。

二、ORM之增,删,改

SOD框架的ORM功能跟通常的ORM框架不同,SOD框架的实体类上并没有数据查询和持久化的方法,所以SOD的实体类是“非常纯粹的”实体类,你可以把它看作是一个数据容器,或者用来当作DTO,ViewModel使用,有关这个话题更详细的阐述,请看这篇文章:《DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架》。

在进行真正的数据查询之前,得先有数据,所以我们先测试数据的增删改。

澳门新浦京娱乐场网站 21

框架源码的获取

       你可以免费向本人索取本框架的测试解决方案 ,如果你喜欢并想获取本框架的全部源码,请在线向本人发邮件联系: dth1977@sohu.com 

       本人也欢迎你从非官方渠道获取本框架程序(不包括源码 ),只要你遵循许可限制。

2.1,删除数据

首先删除之前的测试数据,可以采用OQL进行批量数据删除:

int count = 0;

//删除 测试数据-----------------------------------------------------
User user = new User();
OQL deleteQ = OQL.From(user)
                .Delete()
                .Where(cmp => cmp.Comparer(user.ID, ">", 0)) //为了安全,不带Where条件是不会全部删除数据的
             .END;
count= EntityQuery<User>.ExecuteOql(deleteQ, context.CurrentDataBase);

这里将用户ID 大于0的数据全部删除了,框架内置了数据安全机制,不会随意删除全部数据,所以为了清除全部数据,采用了上面的方法。

澳门新浦京娱乐场网站 22

爱心行动

       本人属四川德阳人士,2008年中国四川汶川大地震德阳也是重灾区,尽管灾害已经过去一年多,但灾区重建仍然是一个漫长过程。因此本人决定采取软件义卖方式,本人承诺,将本框架所获收入的50%捐献给灾区人民,请所有有爱心的人士鼎力支持!

2.2,增加数据

方式1,采用DbContext 的Add 方法:

            count = 0;
            User zhang_san = new User() { Name = "zhang san", Pwd = "123" };
            count  = context.Add<User>(zhang_san);//采用 DbContext 方式插入数据

方式2,采用OQL:

            User li_si = new User() { Name = "li si", Pwd = "123" };
            OQL insertQ= OQL.From(li_si)
                            .Insert(li_si.Name);//仅仅插入用户名,不插入密码

OQL还需EntityQuery 对象配合,才可以执行,继续看下面的代码:

 AdoHelper db = MyDB.GetDBHelperByConnectionName("local");
 EntityQuery<User> userQuery = new EntityQuery<User>(db);
 count  = userQuery.ExecuteOql(insertQ);

下面是结果图:

澳门新浦京娱乐场网站 23

方式3,直接EntityQuery 插入实体类:

 User zhang_yeye = new User() { Name = "zhang yeye", Pwd = "456" };
 count  = EntityQuery<User>.Instance.Insert(zhang_yeye);//采用泛型 EntityQuery 方式插入数据

澳门新浦京娱乐场网站 24

框架应用的项目案例

2007。河南某市测绘流程管理系统,PDF.NET Ver1.0,工作流和信息管理部分;

2008。北京某房产备案管理系统,PDF.NET Ver1.0,工作流部分;

2009。北京某金融咨询公司银行数据应用项目,PDF.NET Ver2.0,作为系统核心框架部分。

2010。XX银行XX市分行基金营销系统,PDF.NET Ver4.0,作为系统核心框架部分。 

。。。更多成功案例等待你的实现:)

2.3,修改数据:

方式1,采用 DbContext 方式更新数据

 li_si.Pwd = "123123";
 count = context.Update<User>(li_si);//采用 DbContext 方式更新数据

方式2,采用OQL方式更新指定的数据

 li_si.Pwd = "123456";
OQL updateQ= OQL.From(li_si)
                .Update(li_si.Pwd) //仅仅更新密码
             .END;
count  = EntityQuery<User>.Instance.ExecuteOql(updateQ);//采用OQL方式更新指定的数据

方式3,采用泛型 EntityQuery 方式修改数据

  li_si.Pwd = "888888";
  count  = EntityQuery<User>.Instance.Update(li_si);//采用泛型 EntityQuery 方式修改数据

澳门新浦京娱乐场网站 25

新版本信息

 

Ver 4.0 更新:

全面改写了实体类处理程序,效率提升10倍;

改进实体类生成器,支持从 SQLSERVER 表字段说明生成实体类属性说明;

SqlMapDAL 支持外部接口定义;

简化了支持多个SqlMap文件的处理方式;

SQL-MAP支持复杂查询的分页;

SQL-MAP改善了对存储过程的支持;

OQL支持单行表达式语法(OQL.From(Entity).Select(....).Where(...).OrderBy(...).END);

实体类支持高效率分页;

优化了生成内部数据访问对象的效率(不再依赖于反射);

优化了其它操作的效率。

 

Ver 3.0 更新:

•全面改写了SqlMap模块,真正支持SQL-实体类 映射
•全面调整了框架的命名空间,合并了基础程序集成为一个 PWMIS.Core.dll
•修正了自2.0以来的Bug
•改进了代码生成器

Ver 2.0 更新:
•使用.NET 2.0技术改写原来所有的模块
•增强了Web控件验证功能
•全面改写原有实体类,提供实体类生成器
•全面改写了OQL功能
•支持.NET 2.0数据库连接配置

Ver 1.0 功能:
•提供SQL-MAP功能
•提供ORM功能,并提供OQL功能
•提供控件数据绑定功能
•提供高效分页控件
•提供控件数据验证功能

 三、ORM之数据查询

澳门新浦京娱乐场网站,前面增删改数据完成了,现在有了测试数据,我们可以来进行ORM的数据查询测试了,这里使用用户登录的例子来测试,框架提供了6种数据查询方式。

澳门新浦京娱乐场网站 26

更多信息

本框架官方网站 (新申请域名,如果不能打开说明还在备案中,原网址:

本人联系方式

QQ:45383850 (深蓝医生)或者

mailto:bluedoctors@msn.com (抗震救灾)

PDF.NET 技术开发群:43109929

相关文档和更多信息请查看官方网站。

 3.1,最简单的方法

假设前端直接传递了一个 User 实体类对象,中间设置了用户名和密码,现在有一个登录方法使用该对象,该方法详细内容如下所示:

       /// <summary>
        /// 使用用户对象来登录,OQL最简单最常见的使用方式
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool Login(User user)
        {
            OQL q = OQL.From(user)
                .Select()
                .Where(user.Name, user.Pwd) //以用户名和密码来验证登录
            .END;

            User dbUser =q.ToEntity<User>();//ToEntity,OQL扩展方法 
            return dbUser != null; //查询到用户实体类,表示登录成功
        }

这里我们使用了SOD框架的ORM查询语言--OQL,它的结构非常类似于SQL,你可以认为OQL就是对象化的SQL语句。

OQL表达式采用 .From.....END 的语法,对象的链式方法调用,只要敲点出来的就是正确的,这样没有SQL基础的同学也可以很快掌握该查询语法,也能马上作数据开发。

注意:在本例中,使用了OQL的扩展方法,因此需要引用下面的名字空间:

using PWMIS.Core.Extensions;

如果不使用扩展方法,可以采用泛型EntityQuery 的方法,请看下面的示例。

澳门新浦京娱乐场网站 27

3.2,使用 OQLCompare 对象的 EqualValue 相等比较方式

        /// <summary>
        /// 使用用户对象来登录,但是使用 OQLCompare 对象的 EqualValue 相等比较方式 
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool Login1(User user)
        {
            OQL q = OQL.From(user)
                 .Select(user.ID) //仅查询一个属性字段 ID
                 .Where(cmp => cmp.EqualValue(user.Name) & cmp.EqualValue(user.Pwd))
              .END;

            User dbUser = EntityQuery<User>.QueryObject(q);
            return dbUser != null; //查询到用户实体类,表示登录成功
        }

跟例1一样,这里也要求user 对象的Name和Pwd属性必须事先有值。本例没有使用OQL的扩展方法。

澳门新浦京娱乐场网站 28

3.3, EntityQuery 泛型查询方法

本例只是对例子1做了下改进,重点在于登录方法的参数不是用户对象,而是名字和密码参数。

       /// <summary>
        /// 使用用户名密码参数来登录,采用 EntityQuery 泛型查询方法
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public bool Login2(string name, string pwd)
        {
            User user = new User()
            {
                Name = name,
                Pwd = pwd
            };

            OQL q = OQL.From(user)
                .Select(user.ID)
                .Where(user.Name, user.Pwd)
            .END;
            User dbUser = EntityQuery<User>.QueryObject(q);

            return dbUser != null; //查询到用户实体类,表示登录成功
        }

澳门新浦京娱乐场网站 29

3.4,使用OQLConditon 对象为查询条件

       /// <summary>
        /// 使用用户名密码参数来登录,使用早期的实例化OQL对象的方式,并使用OQLConditon 对象为查询条件
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public bool Login3(string name, string pwd)
        {
            User user = new User();
            OQL q = new OQL(user);
            q.Select(user.ID).Where(q.Condition.AND(user.Name, "=", name).AND(user.Pwd, "=", pwd));

            User dbUser = EntityQuery<User>.QueryObject(q);
            return dbUser != null; //查询到用户实体类,表示登录成功
        }

这是OQL早期的条件查询方式,缺点是没法构造复杂的查询条件。

澳门新浦京娱乐场网站 30

 3.5,操作符重载

OQLCompare 的操作符重载可以简化比较条件,如下所示:

       /// <summary>
        /// 使用用户名密码参数来登录,并使用操作符重载的查询条件比较方式
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public bool Login4(string name, string pwd)
        {
            User user = new User();

            OQL q = OQL.From(user)
                  .Select()
                  .Where( cmp => cmp.Property(user.Name) == name 
                               & cmp.Property(user.Pwd)  == pwd  )
               .END;

            User dbUser = EntityQuery<User>.QueryObject(q);
            return dbUser != null; //查询到用户实体类,表示登录成功
        }

澳门新浦京娱乐场网站 31

 3.6,使用泛型OQL查询(GOQL)

使用泛型OQL查询(GOQL),对于单实体类查询最简单的使用方式,缺点是不能进行“连表查询”,即多个实体类联合查询。

        /// <summary>
        /// 使用用户名密码参数来登录,使用泛型OQL查询(GOQL),对于单实体类查询最简单的使用方式。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public bool Login5(string name, string pwd)
        {
            User dbUser = OQL.From<User>()
                 .Select()
                 .Where((cmp, user) => cmp.Property(user.Name) == name 
                                     & cmp.Property(user.Pwd)  == pwd  )
            .END
            .ToObject();

            return dbUser != null; //查询到用户实体类,表示登录成功
        }

澳门新浦京娱乐场网站 32

3.7,使用实体类主键来查询

SOD实体类的“主键”字段是可以修改的,这样你可以随时修改它,就像实体类本来的主键一样,用它来填充数据,本例就是判断是否填充成功当前实体类来判断用户是否可以登录。

       /// <summary>
        /// 使用用户名密码参数来登录,但是根据实体类的主键来填充实体类并判断是否成功。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public bool Login6(string name, string pwd)
        {
            User user = new User();
            user.PrimaryKeys.Clear();
            user.PrimaryKeys.Add("Name");
            user.PrimaryKeys.Add("Pwd");

            user.Name = name;
            user.Pwd = pwd;
            bool result= EntityQuery<User>.Fill(user);//静态方法,使用默认的连接对象
            return result;
        }

澳门新浦京娱乐场网站 33

3.8,查询多条数据

前面的例子都只是查询一条数据,如果需要查询多条数据也很简单,参见下面的例子,如何查询所有姓 zhang 的用户:

        /// <summary>
        /// 模糊查询用户,返回用户列表,使用OQLCompare 委托
        /// </summary>
        /// <param name="likeName">要匹配的用户名</param>
        /// <returns>用户列表</returns>
        public List<User> FuzzyQueryUser(string likeName)
        {
            User user = new User();
            OQL q = OQL.From(user)
              .Select()
              .Where(cmp => cmp.Comparer(user.Name, "like", likeName "%") )
            .END;

            List<User> users = EntityQuery<User>.QueryList(q);
            return users;
        }

前端调用:

//查询列表
var users=service.FuzzyQueryUser("zhang");
Console.WriteLine("模糊查询姓 张 的用户,数量:{0}",users.Count );

所以,查询多条数据,仅需要使用泛型 EntityQuery对象的QueryList 方法即可。同样,框架也为你提供了OQL对象扩展方法来直接查询列表数据。

澳门新浦京娱乐场网站 34

3.9,实体类联合查询

这里不再举例,我的博客文章也多次说明过,请参考下面这个系列文章:

ORM查询语言(OQL)简介--高级篇(续):庐山真貌 深蓝医生 2013-07-30 16:54 阅读:4497 评论:41  

 

ORM查询语言(OQL)简介--高级篇:脱胎换骨 深蓝医生 2013-07-26 17:26 阅读:3274 评论:28  

 

ORM查询语言(OQL)简介--实例篇 深蓝医生 2013-04-01 14:56 阅读:5108 评论:16  

 

澳门新浦京娱乐场网站:dotNet下的一套化解方案,数据开荒框架。ORM查询语言(OQL)简介--概念篇 深蓝医生 2012-10-06 00:58 阅读:4657 评论:25  

澳门新浦京娱乐场网站:dotNet下的一套化解方案,数据开荒框架。 

澳门新浦京娱乐场网站 35

四、SOD框架的设计原则

 SOD框架的整个设计都采用了“条条道路通罗马”的原则,即多模式解决方案,对数据的开发不管是SQL-MAP ,ORM,Data Control 哪种模式都可以“殊途同归”,对于OQL,这个也得到了充分的体现,比如上面的用户登录功能,使用了7 种方式来实现,实际上还有3中查询方式本篇文章没有做成说明;而对于实体类的增,删,改,分别又提供了DbContext,OQL,泛型EntityQuery 等多种方式。

所以,SOD框架的使用非常灵活,你可以根据你的偏好,习惯,环境,来灵活使用,而且也容易扩展,因此,相对于EF这样的ORM框架来,SOD框架的ORM功能没有任何束缚,它自由,灵活,而且轻量,容易扩展,但不妨碍它的强大,比如对于分表分库的查询,数据的批量更新插入修改,数据库锁的直接支持等这些“企业级”数据开发需求的支持。

澳门新浦京娱乐场网站 36

五、相关资源

本篇文章的源码,已经上传在了框架的开源项目 pwmis.codeplex.com 网站上,可以通过下面的地址查看完整的源码:

源码下载,可以在下面的地址查看:

 澳门新浦京娱乐场网站 37     简单ORM示例程序--新手必读

有关框架更详细而完整的入门指引,请参考下面这篇文章:

PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引

更多完整而详细的信息,请看框架官网地址:

框架已经完全开源,参看这篇文章:

一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

另外,网友 广州-四糸奈 在他的"惊鸿哥的港湾"写了一篇基础入门介绍文章《PDF.NET最初等入门》,推荐大家看看。

      网友 广州-银古 写了一篇《SOD让你的旧代码焕发青春》,讲述了如何改造老式僵化项目的过程,推荐大家看看。

澳门新浦京娱乐场网站 38

六、最新源码资源地址

CodePlex online :

CodePlex SVN :

GitHub :

OSChina :

 

澳门新浦京娱乐场网站 39

 

后台地址: 

帐号:test  密码:123456  

 

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站:dotNet下的一套化解方案