一直在實現.NET下的O/R M組件,但在把SQL條件運算式注入組件的過程中想法生了一些轉變。雖然O/R M在某些資料操作上的確很靈活和方便,但對關係和對象的依賴性強;對於一些複雜的查詢和統計O/R M不太適合(這隻是個人看法)。
作為一個資料處理組件它應該能夠很好的解決資料處理問題,經過一段時間的思考決定把SQL語句對象化;實現SQL語句在.NET平台下快速調用,O/R M功能作為組件的協助工具功能。把SQL語句轉成相應的對象在.NET中使用並不是大問題,但使用的方便性和功能支援上是痛點。由於前期對組件進行了多次的重構和SQL條件運算式注入實現的一些經驗,這次的更改很快就得到了一些成效。
Delete語句對象化後的調用過程
IDelete delete = session.CreateDelete(Orders.TBL);
delete.Expression = Orders.OrderID >10204 & Orders.OrderID<10400;
delete.Execute();
Update語句對象化後的調用過程
IUpdate update = session.CreateDelete(Orders.TBL);
update.Fields = new Field[]{Orders.EmployeeID.Set(2),Orders.OrderDate.Set("2006-1-1")};
update.Expression =Orders.OrderID.in(new object[]{103001,103002});
update.Execute();
Insert語句對象化後的調用過程
IInsert insert = session.CreateInsert(Employees.TBL);
insert.Fields = new Field[]{Employees.FirstName.Set("Fan")
,Employees.LastName.Set("henry")
,Employees.BrithDay.Set("1978-3-12")};
insert.Execute();
Select語句對象化後的調用過程
IQuery query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL));
query.Selects = new TableField[]{Employees.EmployeeID.at(Employees.TBL)
,SqlMath.Count(Orders.ALL.at(Orders.TBL)).As("Account")};
query.GroupBy = new TableField[]{Employees.EmployeeID.at(Employees.TBL)};
query.ExecuteDataSet();