經過一段時間的修改SQL Artisan1.3功能已經完成,新版本并沒引入太多的新功能,主要著手于使用方便性上的改進和完善。在這個版本中你可以看到數據操作變得很方便簡潔,包括數據查詢和統計;大部分的操作方式都是基于條件的驅動,讓使用者在數據查詢和統計中只關心條件,從而達到簡單快捷地實現相關數據操作功能。由于這個版對基礎的修改比較多因此并不穩定,在這里發表組件使用功能的主要目的是想得到大家意見。
接下來介紹SQL Artisan1.3的功能使用,主要包括以下幾個方面:數據修改操作,數據查詢操作(包括復雜的關聯查詢),聚合統計。通過介紹組件使用的過程你會體會組件在數據操作上的方便性,其效果相信不會令你失望;當然更希望得到的是你寶貴的意見。
數據修改:
1)數據添加:
基于對象方式添加數據和其他持久化組件沒多大區別,實例化相應實體對象后進行Add操作。
Employees item = new Employees();
if((DBMapping.Employees.FirstName =="fan" & DBMapping.Employees.LastName =="henry").Count()>0)
{
Console.WriteLine("雇員信息已經存在!");
}
else
{
item.FirstName ="Fan";
item.LastName ="Henry";
item.HireDate = DateTime.Parse("2001-12-25");
item.BirthDate = DateTime.Parse("1992-1-28");
item.Photo = new byte[0];
item.ReportsTo=1;
DAOContext.Add(item);
}
組件除了添加對象方式添加數據以外,可以通過直接操作相關Table映射模型進行數據添加操作;通過這種方式可以靈活地控制在添加數據時操作那個字段模型。
DBMapping.Employees.Insert(
DBMapping.Employees.FirstName.Set("He"),
DBMapping.Employees.LastName.Set("LiQing")
);
2)數據修改:
數據修改同樣也提供兩種方式,基于對象和字段模型。
//以對象方式更新
Employees item =(Employees)DAOContext.Load(typeof(Employees),1);
item.City ="GuangZhou";
DAOContext.Edit(item);
//以字段模型更新
(DBMapping.Employees.EmployeeID == 1).Update(
DBMapping.Employees.City.Set("GuangZhou")
);
3)數據刪除:
組件數據刪除完成可以基于條件驅動的方式來進行操作。
//刪除索引是1000 的雇員信息
(DBMapping.Employees.EmployeeID ==1000).Delete();
//刪除索引是101,102和103的雇員信息
DBMapping.Employees.EmployeeID.In(101,102,103).Delete();
//刪除FirstName是Fan或He的雇員信息
(DBMapping.Employees.FirstName=="Fan" | DBMapping.Employees.FirstName =="He").Delete();
數據查詢:
組件的數據查詢主要有幾種方式,通過DAOContext對象、Table模型對象和條件驅動方式。條件驅動是最簡化的一種使用方式,因為下面描述的例程都是基于條件驅動的查詢.
對象查詢:
//獲取所有雇員信息
ExPRession exp = new Expression(DBMapping.Employees);
System.Collections.IList list = exp.List();
//獲取國家是USA的所有雇員信息
list = (DBMapping.Employees.Country=="USA").List();
//獲取訂單日期在1997-7-1和1997-8-1之間訂單記錄
list =(DBMapping.Orders.OrderDate>= DateTime.Parse("1997-7-1") &
DBMapping.Orders.OrderDate < DateTime.Parse("1997-8-1")).List();
//獲取USA國家雇員的所有訂單
list =(DBMapping.Orders.Employee==(DBMapping.Employees.Country =="USA")).List();
//獲取SP地區客戶的所有訂單
list=(DBMapping.Orders.Customer ==(DBMapping.Customers.Region=="SP")).List();
視圖對象查詢:
組件是通過視圖對象的方式來體現關聯查詢的,視圖對象主要用于描述對象信息來源于那些表,通過那種方式進行關聯和加載那些信息。這樣可以集中統一地描述查詢需求,從而達到一個比較好的代碼重用效果,也簡化在查詢時一些煩瑣信息的編寫。
對象視查詢例程:
//獲取國家是USA所有雇員的訂單信息
list=(DBMapping.Orders.Employee ==(DBMapping.Employees.Country=="USA")).ListTo(new OrderV());
//獲取SP地區在1997-7-1到1997-8-1銷售的訂單
list =(DBMapping.Orders.Customer ==(DBMapping.Customers.Region=="SP")
& DBMapping.Orders.OrderDate >= DateTime.Parse("1997-7-1")
& DBMapping.Orders.OrderDate < DateTime.Parse("1997-8-1")
).ListTo(new OrderV());
制定視圖對象:
/// <summary>
/// 訂單關聯查詢描述實體類
/// 相關表:Orders,Employees,Customers;
/// </summary>
[TableMap("",TableType.View)]
public class OrderV:Orders,Hfsoft.Data.ITableView
{
public OrderV()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
#region ITableView 成員
/// <summary>
/// 獲以關聯表對象
/// </summary>
/// <returns>Table</returns>
public HFSoft.Data.Mapping.Table GetTable()
{
// TODO: 添加 OrderV.GetTable 實現
return DBMapping.Orders.INNER(DBMapping.Employees,DBMapping.Employees.EmployeeID) &
DBMapping.Orders.INNER(DBMapping.Customers,DBMapping.Customers.CustomerID);
}
#endregion
private string mCustomerName;
/// <summary>
/// 客戶名稱
/// </summary>
[ViewColumn("CompanyName")]
public string CustomerName
{
get
{
return mCustomerName;
}
set
{
mCustomerName = value;
}
}
private string mEmployeeName;
/// <summary>
/// 雇員姓名
/// </summary>
[ViewColumn("FirstName+LastName")]
public string EmployeeName
{
get
{
return mEmployeeName;
}
set
{
mEmployeeName = value;
}
}
}
聚合統計:
組件只提供一個默認的聚合統計就是基于條件Count操作,此操作并不支持分組功能。但對于其他聚合統計可以通過視圖對象的方式來完成,視圖對象可以完成數據分組、字段運算等復雜的統計描述。
統計查詢例程:
//獲取所有訂單數
Expression exp = new Expression(DBMapping.Orders);
int count = exp.Count();
//獲取國家是USA所有雇員的訂單數據
count=(DBMapping.Orders.Employee ==(DBMapping.Employees.Country=="USA")).Count();
//統計所有訂單的銷售金額
SumPrice price =(SumPrice)exp.ListTo(new SumPrice())[0];
//統計1997-7-1到1997-8-1銷售金額
price =(SumPrice)(DBMapping.Orders.OrderDate >= DateTime.Parse("1997-7-1")
& DBMapping.Orders.OrderDate < DateTime.Parse("1997-8-1")).ListTo(new SumPrice())[0];
//匯總雇員銷售金額
System.Collections.IList list = exp.ListTo(new SumPriceByGroup());
//匯總某個國家的雇員銷售金額
list = (DBMapping.Orders.Employee ==(DBMapping.Employees.Country =="USA")).ListTo(new SumPriceByGroup());
制定統計描述對象:
/// <summary>
/// 訂單銷售統計描述對象
/// </summary>
[TableMap("",TableType.View)]
public class SumPrice:ITableView
{
public SumPrice()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
#region ITableView 成員
public Table GetTable()
{
// TODO: 添加 OrderV.GetTable 實現
return DBMapping.Orders.INNER(DBMapping.Employees,DBMapping.Employees.EmployeeID)
&DBMapping.Orders.INNER(DBMapping.Customers,DBMapping.Customers.CustomerID)
& DBMapping.Orders.INNER(DBMapping.OrderDetails,DBMapping.Orders.OrderID);
}
private Double mPrice;
[StatColumn("Quantity*UnitPrice*(1-Discount)",StatType.Sum)]
public Double Price
{
get
{
return mPrice;
}
set
{
mPrice = value;
}
}
#endregion
}
/// <summary>
/// 按雇員分組銷售統計描述對象
/// </summary>
[TableMap("",TableType.View)]
public class SumPriceByGroup:SumPrice
{
private int mEmployeeID;
[ViewColumn("Employees.EmployeeID")]
public int EmployeeID
{
get
{
return mEmployeeID;
}
set
{
mEmployeeID = value;
}
}
}
http://www.cnblogs.com/henryfan/archive/2006/09/10/500210.html
新聞熱點
疑難解答