PDF.NET数据开发框架操作MySQL实体类操作实例
在我们最近的项目中,SQL-MAP使用较多,但是实体类用的很少,实际上,“PDF.NET数据开发框架”的实体类相当强大,下面的测试程序是在MySQL中操作的实例。
1,首先在App.config文件中配置数据库连接字符串:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name ="default" connectionString ="server=192.168.XX.XX;User Id=root;password=XXXX;database=test" providerName="PWMIS.DataProvider.Data.MySQL,PWMIS.MySqlClient"/>
</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); }
}
}
}
3,根据这个实体类,我们去MySQL定义一个用户表:tb_user,具体过程省略。
(此目的也是为了先有实体再有数据表,以便大家领略ORM的正真含义)
4,编写ORM实体类操作的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PWMIS.DataMap.Entity;
namespace TestMySqlEntity
{
class Program
{
static void Main(string[] args)
{
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:rn"+q.ToString ());
//*************构建 OQL 查询表达式 ******* end ************
//查询实体列表
var result = EntityQuery<User>.QueryList(q);
Console.WriteLine("查询实体集合成功,数量:"+result .Count );
Console.WriteLine("rnExecuted SQL Text:rn{0}rn", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);
//查询单个实体
u.Name = "zhang san";
q.Select().Where(u.Name);
Console.WriteLine("OQL to SQL:rn" + q.ToString());
User u1 = EntityQuery<User>.QueryObject(q);
if (u1 != null)
Console.WriteLine("查询单个实体成功!");
Console.WriteLine("rnExecuted SQL Text:rn{0}rn", 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("rnExecuted SQL Text:rn{0}rn", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);
u.Age = 25;
if (EntityQuery<User>.Instance.Update (u) > 0)
Console.WriteLine("修改实体成功!");
Console.WriteLine("rnExecuted SQL Text:rn{0}rn", 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("rnExecuted SQL Text:rn{0}rn", PWMIS.DataProvider.Data.CommandLog.Instance.CommandText);
Console.Read();
}
}
}
5,编译运行,得到下面的结果:
OQL to SQL: SELECT [ID],[Name],[Age] FROM [tb_user] Where [Age] >= @Age0 Order by [Age] asc 查询实体集合成功,数量:23
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)
修改实体成功!
Executed SQL Text: UPDATE `tb_user` SET `Age`=@P0 WHERE `ID`=@P1
更新实体成功!
Executed SQL Text: INSERT INTO `tb_user`(`Name`,`Age`) VALUES (@P0,@P1)
6,结果说明
我们看到整个操作都成功了,特别注意这个:
UPDATE `tb_user` SET `Age`=@P0 WHERE `ID`=@P1
当时我们只给Age属性重新赋值了,所以生成的更新语句也仅仅更新了该字段。
实体类查询OQL表达式可以有多种Where条件构造方式,具体请看上面的代码。
- 开发中巧用Enum枚举类型
- Jquery 事件冒泡
- Vue2的单元测试与调试技术
- silverlight beta 2 将在本周末发布.
- [Silverlight 4 RC]WebBrowser概览
- 英文域名chosen.com超22万元易主
- 简单介绍Docker的架构特性与局限
- .NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的配置方法)
- 微信搜索新发现:iPhone 内存不足看这里!
- 建立可扩展的silverlight 应用框架 step-6
- .NET4.0下网站应用程序用UrlRewriter.dll重写无后缀路径 (在IIS7.5中的配置方法)
- 苹果为你的心跳开发一个读者
- 建立可扩展的silverlight 应用框架 step-5
- 安卓 iOS 版双双更新!还带来一大波小游戏
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- AttributeError: NoneType object has no attribute‘’
- tf.control_dependencies(control_inputs)
- tf.get_collection()
- tf.reduce_mean()
- tf.placeholder函数说明
- tf.sigmoid()用法
- Latex 表格过大(或过小)的调整方法
- Latex设置字体大小及表格中的文字大小等
- jQuery 选择器
- jQuery 介绍 以及基本使用
- 答应我,用了这个jupyter插件,别再重复造轮子了
- 商业数据分析从入门到入职(9)Python网络数据获取
- 谈一谈还原解包后小程序页面wxss样式的若干方法
- 什么?不使用selenium爬京东评论?你是不是在骗我
- 骚操作,Python操作PPT,你会吗?