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()
实现插入,更新
------解决方案--------------------