PDF.NET数据开发框架实体类操作实例(MySQL)
的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程。

1,首先在App.config文件中配置数据库连接字符串:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <!--<add name ="default" connectionString ="server=192.168.50.41;User Id=root;password=hisun;database=test" providerName="PWMIS.DataProvider.Data.MySQL,PWMIS.MySqlClient"/>-->
    <add name ="default" connectionString ="server=127.0.0.1;User Id=postgres;password=hisun;database=Test" providerName="PWMIS.DataProvider.Data.PostgreSQL,PWMIS.PostgreSQLClient"/>
  </connectionStrings>
</configuration>

2,定义一个用户实体类:


/*
 * PDF.NET 数据开发框架
 * http://www.pwmis.com/sqlmap
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PWMIS.DataMap.Entity; namespace TestMySqlEntity
{
    class User:EntityBase 
    {
        public User()
        {
            TableName = "tb_user";
            PrimaryKeys.Add("ID");//主键
            //IdentityName = "ID";//标识,自增
            PropertyNames = new string[] {"ID","Name","Age" };
            PropertyValues = new object[PropertyNames.Length];         }         public int ID
        {
            get { return getProperty<int>("ID"); }
            set { setProperty("ID", value); }
        }         public int Age
        {
            get { return getProperty<int>("Age"); }
            set { setProperty("Age", value); }
        }         public string Name
        {
            get { return getProperty<string>("Name"); }
            set { setProperty("Name", value,50); }
        }
    }
}

与MySQL中定义的用户实体类不同,下面这一行代码被注释掉了:

//IdentityName = "ID";//标识,自增
虽然PostgreSQL有“自增”列,但无法直接取到刚插入的这个自增值,所以需要注释它。

3,根据这个实体类,我们去MySQL定义一个用户表:tb_user,具体过程省略,注意字段“ID”仍然使用自增列(在PostgreSQL中是 serial 类型,但编辑表类型的时候,发现字段是整数类型,不过有了默认值:nextval('"User_ID_seq"'::regclass))。

4,编写ORM实体类操作的测试代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PWMIS.DataMap.Entity;
using System.Data; namespace TestMySqlEntity
{
    class Program
    {
        static void Main(string[] args)
        {
            PWMIS.DataProvider.Data.AdoHelper db = PWMIS.DataProvider.Adapter.MyDB.GetDBHelperByConnectionName("default");
            //PWMIS.DataProvider.Data.AdoHelper db = PWMIS.DataProvider.Adapter.MyDB.Instance ;
            //MySQL 存储过程测试;
            //参数名字可以加 @符号,例如 @pAge1
            //DataSet ds1= db.ExecuteDataSet("proc_user1", 
            //    CommandType.StoredProcedure,
            //    new System.Data.IDataParameter[] { db.GetParameter ("@pAge1",22) });             
            //
            User u = new User();             //*************构建 OQL 查询表达式 ******* begin ************
            //查询实体集合
            //使用 OQLCompare 对象作为条件
            //OQL q = OQL.From(u).Select().Where(new OQLCompare(u).Comparer(u.Age, OQLCompare.CompareType.NoSmaller, 15)).END ;             OQL q = new OQL(u);
            //使用OQL2 作为条件对象
            q.Select().Where(q.Condition.AND(u.Age, ">=", 15)).OrderBy (u.Age ,"asc");
            //使用 QueryParameter 数组作为条件,适合于多个并列的And条件
            //q.Select().Where(new QueryParameter[] { new QueryParameter("Age", PWMIS.Common.enumCompare.NoSmaller, 15) }).OrderBy(u.Age, "asc"); 
            Console.WriteLine("OQL to SQL:\r\n"+q.ToString ());             
            //*************构建 OQL 查询表达式 ******* end ************             //查询实体列表
            var result = EntityQuery<User>.QueryList(q);
            Console.WriteLine("查询实体集合成功,数量:"+result .Count );             Console.WriteLine("\r\nExecuted SQL Text:\r\n{0}\r\n", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);             //查询单个实体
            u.Name = "zhang san";
            q.Select().Where(u.Name);
            Console.WriteLine("OQL to SQL:\r\n" + q.ToString());
            User u1 = EntityQuery<User>.QueryObject(q);
            if (u1 != null)
                Console.WriteLine("查询单个实体成功!");             Console.WriteLine("\r\nExecuted SQL Text:\r\n{0}\r\n", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);             //直接使用EntityQuery<T>.Instance 属性的插入、修改、删除方法
            u.Name = "li si3";
            u.Age = 15;
            if (EntityQuery<User>.Instance.Insert(u) > 0)
                Console.WriteLine("插入实体成功!"); //将自动为ID属性赋值             Console.WriteLine("\r\nExecuted SQL Text:\r\n{0}\r\n", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);             //PostgreSQL 没有 @@IDENTITY 变量,所以无法拿到刚才的自增值,注释掉下面的修改方法
            //u.Age = 25;
            //if (EntityQuery<User>.Instance.Update (u) > 0)
            //    Console.WriteLine("修改实体成功!");             //Console.WriteLine("\r\nExecuted SQL Text:\r\n{0}\r\n", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);             User u2 = new User();
            u2.Name = "wang wu";
            u2.Age = 20;             //使用EntityQuery<T> 的实例对象方法更新实体
            //只会更新赋值过的属性值
            EntityQuery<User> eq = new EntityQuery<User>(u2);
            if (eq.SaveAllChanges() > 0)
                Console.WriteLine("更新实体成功!");             Console.WriteLine("\r\nExecuted SQL Text:\r\n{0}\r\n", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);             Console.Read();
        }
    }
}

注意上面代码中的这一部分:

//PostgreSQL 没有 @@IDENTITY 变量,所以无法拿到刚才的自增值,注释掉下面的修改方法
虽然注释了修改实体的方法,但只要手工给ID属性设置值,仍然可以修改实体。

5,编译运行,得到下面的结果:

OQL to SQL:
SELECT [ID],[Name],[Age]
 FROM [tb_user]
   Where  [Age] >= @Age0
        Order by [Age] asc
查询实体集合成功,数量:3

Executed SQL Text:
SELECT "ID","Name","Age"
 FROM "tb_user"
   Where  "Age" >= @Age0
        Order by "Age" asc

OQL to SQL:
SELECT [ID],[Name],[Age]
 FROM [tb_user]
   Where [Name]=@Name

查询单个实体成功!

Executed SQL Text:
SELECT "ID","Name","Age"
 FROM "tb_user"
   Where "Name"=@Name

插入实体成功!

Executed SQL Text:
INSERT INTO "tb_user"("Name","Age") VALUES (@P0,@P1)
注意:在PostgreSQL中,SQL语句中的字段名要使用双引号。

PDF.NET数据开发框架实体类操作实例的更多相关文章

  1. android开发学习 ------- json数据与实体类之间的相互转换

    在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...

  2. File 类 操作实例

    File 操作 <介绍> 尽管java.io定义的大多数类是实行流式操作的,File类不是.它直接处理文件和文件系统.也就是说,File类没有指定信息怎样从文件读取或向文件存储:它描述了文 ...

  3. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值

    本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...

  4. Spring简单获得实体类的实例, 使用ApplicationContext()方法的几点注意事项

    今天接触了Spring的初步用法, 感觉跟实例化实体类没啥区别, 像这种简单的代码还不如直接实例化来的方便, 这样使用Spring的话总共需要三个文件 第一个当然是一个实体类了, 定义好属性, get ...

  5. ASP.NET JSON数据转实体类方式

    实体类 public class FlieList { public string file_unid { get; set; } public string file_name { get; set ...

  6. java内部类(构造spring中的接收返回数据的实体类)

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟. 原文链 ...

  7. Http请求发送json数据用实体类接收

    以上是请求URL以及json数据 接收层

  8. DataSet的灵活,实体类的方便,DTO的效率:SOD框架的数据容器,打造最适合DDD的ORM框架

    引言:DDD的困惑 最近,我看到园子里面有位朋友的一篇博客 <领域驱动设计系列(一):为何要领域驱动设计? >文章中有下面一段话,对DDD使用产生的疑问: •没有正确的使用ORM, 导致数 ...

  9. Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态

    Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...

随机推荐

  1. iOS多线程常用类说明

    iOS的多线程,涉及到如下一些类,这里集中做个介绍,免得混淆. 1.NSTimer 很显然,这是定时器类 2.NSTask iOS 不支持 NSTask 在很多并发操作的时候,多线程太耗资源,也太危险 ...

  2. 你觉得你非常了解Javascript?

    (翻译不当之处请谅解) 来源:http://www.ido321.com/914.html 这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台执行之前,尝试回答每一 ...

  3. hdu5293 Tree chain problem 树形dp+线段树

    题目:pid=5293">http://acm.hdu.edu.cn/showproblem.php?pid=5293 在一棵树中,给出若干条链和链的权值.求选取不相交的链使得权值和最 ...

  4. java调试打断点和不打断点执行结果不一致问题解决

    java程序在调试的时候需要debug来跟踪一下结果,有一种情况是这样的,正常执行java程序就会出现问题,而断点debug跟踪此方法的时候却是正常的,不断测试结果都是这样,由此判断有可能是因为此方法 ...

  5. Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(1)-墨卡托投影与坐标控制

    (相关的代码能够从https://github.com/goldenhawking/mercator.qtviewer.git直接克隆) 我们如今是准备做一个C/S架构的地图显示控件.就必定牵扯到坐标 ...

  6. Java类的实例化的初始化过程

    A a = new A(); new 创建对象过程: 1.类加载     代码验证 2.给对象在内存(堆)中分配空间(给属性赋值): 3.属性赋默认值: byte,short.int,long -&g ...

  7. 56. Two Sum【easy】

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  8. dp之完全背包poj2063

    题意:求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币. 注意:每一年收到的利息都可以作为下一年的本金......其实从测试数据来看,是很好看出来的...... 思路 ...

  9. 应用DataAdapter对象填充DataSet数据集

    private void Form1_Load(object sender, EventArgs e) { string strCon = "Server=localhost;User Id ...

  10. Unity3D 5.0版本+注册工具分享

    Unity3D引擎5.0正式版本发布也有一段时间了.笔者今天下载了新版本顺便分享一下资源. 主要有两个资源,一个是5.0f4的官方客户端,另外一个是vs的调试插件.有需要的盆友就拿去.都在下面的连接地 ...