SQL語句對象化的想法

來源:互聯網
上載者:User

一直在實現.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();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.