次のバージョン(v2010 vol2)にて、XPOがダイレクトにSQLを発行する機能に対応するとの事です。
個人的にやっとキターーーー!!って感じです。
- XPO – Direct SQL Queries
実際の処理の書き方は以下のようになる模様ですね。
(以下上記ブログ記事から抜粋)
[更新処理]
public void UpdateDiscount(out int affectedRows) { affectedRows = unitOfWork1.ExecuteNonQuery("UPDATE [Northwind]" + ".[dbo].[Order Details] SET [Discount] = 0.15 WHERE "+ "[UnitPrice] > 50"); }
[データ取得]
public int GetEmployeeOrdersCount(int employeeId) { return (int)unitOfWork1.ExecuteScalar(string.Format( "SELECT COUNT(*) FROM [Northwind].[dbo].[Orders] " + "WHERE [EmployeeID] = {0}", employeeId)); }
public SelectedData GetEmployeesSimpleData() { return unitOfWork1.ExecuteQuery("SELECT EmployeeID, (FirstName + ' ' " + "+ LastName) as Name, City, Country FROM " + "[Northwind].[dbo].[Employees]"); }
ADO.NETと同じメソッド名にしてありますね。
もちろん、Persistent Classを定義して、それにSQLの結果を
設定することも可能です。MyBatis (iBatis)みたいな感じ。
[NonPersistent] public class EmployeeSimple : XPLiteObject { [Key] public int EmployeeID; public string Name; public string City; public string Country; public EmployeeSimple(Session session) : base(session) { } }
public ICollection<EmployeeSimple> GetEmployeesSimple() { return unitOfWork1.GetObjectsFromQuery<EmployeeSimple>("SELECT " + "EmployeeID, (FirstName + ' ' + LastName) as Name, City, Country " + "FROM [Northwind].[dbo].[Employees]"); }
取得したデータはXPDataViewに設定することで、各コントロールにバインドできるようになります。
private void Form1_Load(object sender, EventArgs e) { //Fill information about the properties of a class EmployeeSimple xpDataView1.FillProperties(unitOfWork1.GetClassInfo<EmployeeSimple>()); //Load the data xpDataView1.LoadData(GetEmployeesSimpleData()); }
次のバージョンに搭載されるみたいです。
楽しみだ。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ