日期:2014-05-20  浏览次数:20761 次

My OQL:我对ORM对象查询语言的一点思考
最近一直在思考有关ORM的问题,对于对象查询的语法表达觉得很是头疼。现在提出这样的对象查询语法表达式(以已经实现了),大家看看怎么样?

lbMsg.Text=dwfs
.Select   (new   object[]   {wfs.ID,wfs.Name}   )
.Where   (new   Condition(dwfs).Compare   (wfs.ID   , "> ",55).AND.Equal   (wfs.Name, "dth "))
.OrderBy   (new     OrderList(dwfs).DESC   (wfs.ID   ).ASC   (wfs.Name   )).SQL     ;
---------------------
输出:

SELECT   [ID],[Name]   FROM   [WFS]   WHERE   [ID]> 55   AND   [Name]= 'dth '   ORDER   BY   [ID]   DESC,[Name]   ASC

--------------------
其中的字段都定义在实体类中。


------解决方案--------------------
ORM这么繁琐吗?
------解决方案--------------------
有些意义

我也搞了一个适合自己ORM


----------------------
1、在数据库中建立表
----------------------
如:

表名:test_Table
字段 ID,自动号,设置为主键
字段 DM,文本
字段 MC,文本


----------------------
2、建立实体
----------------------
添加引用 using WebMIS.Data.EntityAccess;

/// <summary>
/// 实体映射的例子。
/// </summary>
public class Test_Table:WebMIS.Data.EntityAccess.DBEntity
{
private long _ID = -1;
private string _Code = " ";
private string _Name = " ";

public Test_Table():base( "test_Table ", "ID ") //第一参数为表名,第二参数为主键名
{
}

public long ID
{
get{return _ID;}
set{_ID = value;}
}

public string Code
{
get{return _Code;}
set{_Code = value;}
}

public string Name
{
get{return _Name;}
set{_Name = value;}
}

public override System.Collections.IList GetPrimaryKeyValues()
{
return new long[]{_ID};
}

public override System.Collections.IList GetFields()
{
return new string[]{ "ID ", "dm ", "mc "};
}


public override System.Collections.IList GetFieldValues()
{
return new object[]{_ID,_Code,_Name};
}

public override void LoadFrom(System.Data.DataRow entityDataRow)
{
_ID = long.Parse(entityDataRow[ "ID "].ToString());
_Code = entityDataRow[ "dm "].ToString();
_Name = entityDataRow[ "mc "].ToString();
}
}


----------------------
3、实体管理(实现增、删、改、查功能)
----------------------
输入类名称,一般取实体表+Management就可以,如test_TableManagement.cs

添加引用
using WebMIS.Data.EntityAccess;

public Test_TableManagement(Test_Table entity):base(entity){}

这样

2> 实现增、删、改、查调用方法

实体 oo = new 实体();

实体Management om = new 实体Management(oo);

只要设置
oo.主键属性=值
这样,就可用
om.FillByPK()
实现查询,并把数据写到实体其它属性中

只要设置

oo.属性1=...
oo.属性2=...

这样,就可用
om.Insert()
om.Update()
实现插入,更新
------解决方案--------------------