SQL Artisan現有的版已經在項目中運用,在使用的過程中得到的效果相當理想.剛接觸這個組件的幾個新同事通過了解已有例子,很快就能適應到項目開發過程中.組件的對象操作和編譯檢測大提高了編寫效率,在項目中得到的效果自己也有點意想不到.
SQL Artisang下一個版本的功能主完善在表對象操作和對象映射方面;包括:表對象支持數據操作,對象繼承,視圖對象映射,統計對象映射等.為了讓組件功能擴展更方便,把組件的數據映射方式進行重構,由原來的xml描述改成Attribute;并把相關應映射成員搬遷到Hfsoft.Data.Mapping名稱空間下.以下描述只是組件在新版本中具備的功能,大部分還在實現過程。
表對象的數據操作
新版本表對象(Table)由ExPRessions名稱間搬遷到Mapping名稱空間下.舊版本的表對象只支持表的關聯操作功能比較單一.在功能完善后會支持數據的新增、刪除、修改和查詢操作。在程序中可以通過以下方式定義表和字段的對象:
Table tbl = new Table("Employees");
NumberField field = new NumberField("EmployeeID");
數據新增
Employees.TBL.Insert(
Employees._FirstName.Set("Fan"),
Employees._LastName.Set("Henry"),
Employees._BirthDate.Set(DateTime.Parse("1979-1-1"))
);
數據修改
Employees.TBL.Update(Employees._FirstName =="Fan",
Employees._City.Set("GuangZhou"),
Employees._Address.Set("TianHe"),
Employees._Region.SetNull());
數據刪除
Employees.TBL.Delete(Employees._FirstName =="Fan");
數據查詢
System.Collections.IList lst = Orders.TBL.Where(
Orders._OrderDate >= DateTime.Parse("1997-1-1")&
Orders._OrderDate < DateTime.Parse("1997-8-1")
).SelectObject();
foreach(Orders item in lst)
{
Console.WriteLine(item.OrderID);
}
統計查詢
System.Data.DataSet ds = Orders.TBL.INNER(OrderDetails.TBL,OrderDetails._OrderID)
.Where(Orders._OrderDate >= DateTime.Parse("1997-8-1"))
.OrderBy(Orders._EmployeeID.DESC)
.GroupBy(Orders._EmployeeID)
.Select(SqlMath.Sum(OrderDetails._Quantity*OrderDetails._UnitPrice*(1-OrderDetails._Discount)).As("account"),Orders._EmployeeID);
foreach(System.Data.DataRow row in ds.Tables[0].Rows)
{
Console.WriteLine(row["account"]);
}
對象繼承
這里的對象繼承只是描述對象映射繼承關系,通常用于后面所描述的視圖對象。在數據查詢過程中有經常要獲取關聯表的某些字段信息;如:在查詢訂單里需要獲取相關雇員的姓名和客戶名稱,雇員和客戶的其他信息是不需要的;這個時候可以繼承訂單類實現一個新的映射類。
[Table("",TableType.View)]
public class OrderView:Orders
{
[ViewColumn("Employees","FirstName")]
public string EmpFirstName
{
get;
set;
}
[ViewColumn("Employees","LastName")]
public string EmpLastName
{
get;
set;
}
[ViewColumn("Customers","CompanyName")]
public string CompanyName
{
get;
set;
}
}
System.Collections.IList lst
= (Orders.TBL.INNER(Employees.TBL,Employees._EmployeeID)&
Orders.TBL.INNER(Customers.TBL,Customers._CustomerID))
. SelectObject (typeof(OrderView));
通過以上對象的映射,組件不會加載多余的字段信息,從而獲取更好的加載效率。這里有一個比較關心的問題就是OrderView是否能進行數據更新操作?在上的例子中OrderView是可以進行更新操作的,但只是會更新父類Orders映射部分其他部分不作更新。在操作過程中組件會驗測對象的基類(一直找到最頂層),如果檢測對象不是由表對象派生下來就不會進行任何更新操作并拋操作異常。
視圖對象
視圖對象類似數據庫中的視圖,通過自定義視圖對象可以選擇性地映射相關字段信息,很多時候映射表的所有字段過于臃腫;視圖對象也可能通過表對象派生下來。以下通過視圖對象獲取雇員的編號和姓名:
[Table("",TableType.View)]
public class EmployeeView
{
[ViewColumn("","EmployeeID")]
public int ID
{
get;
set;
}
[ViewColumn("","FirstName+LastName")]
public string Name
{
get;
set;
}
}
System.Collections.IList lst
= Employees.TBL.SelectObject(typeof(EmployeeView));
通過視圖對象可以靈活地獲取相關數據信息。
統計對象映射
統計對象其實是視圖對象的一種,是用于描述數據統計的方式和輸出的結果。組件支持以下統計方式:Count,Max,Min,Sum,Avg.
制定一個統計對象如何下:
[Table("",TableType.View)]
public class StatOrder
{
[ViewColumn("","EmployeeID")]
public int EmployeeID
{
get;
set;
}
[StatColumn("","*",StatType.Count)]
public int Count
{
get;
set;
}
}
System.Collections.IList lst = Orders.TBL.SelectObject(typeof(StatOrder));
組件會自動根據對象的映射信息按雇員分組進行統計。如果想統計某個條件可以這樣:
System.Collections.IList lst = Orders.TBL.Where(
Orders._OrderDate >= DateTime.Parse("1997-1-1")&
Orders._OrderDate < DateTime.Parse("1997-8-1")
).SelectObject(typeof(StatOrder));
以上主要描述SQL Artisan在下一個版本實現的功能,可是現在項目忙沒多少空余時間去實現,看來要等一個比較長的時間才能完成。
有興趣的朋友可以提一下意見和想法。
http://henryfan.cnblogs.com/archive/2006/05/23/407012.html
新聞熱點
疑難解答