前面的四篇文章演示ORM的一些常规操作与配置,通过前面的文章,应用开发人员要可以使用ORM开发出简单的应用,但是,ORM也不是万能钥匙,在业务应用中,还有很多是ORM解决不了的问题,对于这些问题,我们必须景借助于SQL语句。
本文重点
既然ORM解决不了所有的问题,我们得借助于SQL语句,也就是我们可以理解为在DAL层,在ORM对象中,还得支持SQL的操作:
AgileEAS.NET平台中的ORM提供了这种支持,他通过了ORM对象提供的DataAccessor属性完成SQL语句的查询与执行,即在ORM组件中支持下的程序写法:
this.DataAccessor.Execute(sql语句,参数)。
有关于UDA对象的使用请参考一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句、一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA中的委托与应用、一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA中处理事务三篇文章。
演示的例子
本文的演示我将在前面的演示的基础之上演示实现取得商品字典中最大的IDN号的实现,首先我们修改ClassLibDemo.DAL.SQLServer项目的Product.cs文件,在类Product中增加如下代码:
2 /// 取记录最大号。
3 /// </summary>
4 /// <returns></returns>
5 public int GetMaxIdn()
6 {
7 return (int)this.DataAccessor.Query("select isnull(max(idn),0) maxid from " + this.DbTableName);
8 }
9
10 /// <summary>
11 /// 取记录最大号。
12 /// </summary>
13 /// <returns></returns>
14 public int GetMaxNewIdn()
15 {
16 return (int)this.DataAccessor.Query("select isnull(max(idn),0)+1 maxid from " + this.DbTableName);
17 }
然后我们在ClassLib.OrmDemo项目的DataObjectDemo增加如下代码:
2 /// 演示增加一条记录。
3 /// </summary>
4 public void DemoInsert2()
5 {
6 Product product = new Product();
7 product.OrmAccessor = OrmContext.OrmAccessor;
8
9 product.Idn = product.GetMaxNewIdn();
10 product.Code = "AXX-" + product.Idn.ToString("D6");
11 product.Name = "台式电脑";
12 product.Spec = "主流配置/扣肉i7/21显示";
13 product.Unit = "台/套";
14 product.Description = string.Empty;
15
16 try
17 {
18 product.Insert();
19 System.Console.WriteLine("成功插入记录");
20 }
21 catch (System.Exception exc)
22 {
23 System.Console.WriteLine("插入记录出错:" + exc.Message);
24 }
25 }
26
27 /// <summary>
28 /// 演示读取一条记录。
29 /// </summary>
30 public void DemoQuery2()
31 {
32 Product product = new Product();
33 product.OrmAccessor = OrmContext.OrmAccessor;
34 product.Code = "AXX-" + product.GetMaxIdn().ToString("D6");
35 product.Refresh(); //读数据
36
37 if (product.Exists)
38 {
39 System.Console.WriteLine(string.Format("已查询以记录:Idn={0}\tCode={1}\tName={2}\tSpec={3}\tUnit={4}\tDescription={5}", product.Idn, product.Code, product.Name, product.Spec, product.Unit, product.Description));
40 }
41 else
42 {
43 System.Console.WriteLine("不存在此记录");
44 }
45 }
System.Console.WriteLine("按任意键继续...");System.Console.Read();System.Console.WriteLine("演示自定义业务(取最大号Insert)的例子:");new DataObjectDemo().DemoInsert2();new DataObjectDemo().DemoQuery2();
编译运行,输出结果:
有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:ORM.Demo5.rar。
链接
一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录
AgileEAS.NET平台开发指南-系列目录
AgileEAS.NET应用开发平台介绍-文章索引
AgileEAS.NET平台应用开发教程-案例计划
AgileEAS.NET官方网站
敏捷软件工程实验室
QQ群:116773358