はじめに
「ObjectService」とは、Visual Studio(VB.NET/C#)とSQL Server 2005の接続に使用可能なO/Rマッピングツールです。今回は、親子関係を持つオブジェクトの取り扱いについて紹介します。
これまでの記事
- VB.NET版O/Rマッピングツール「ObjectService」を使ったDBアクセス
- VB.NET版O/Rマッピングツール「ObjectService」の使い方(継承設定)
- VB.NET版O/Rマッピングツール「ObjectService」の使い方(バージョン管理)
対象読者
- VB.NETを使用する方
- SQL Server 2005を使用する方
- O/Rマッピングに興味がある方
必要な環境
項目 | 環境 |
OS | Windows XP/Vista |
データベース | SQL Server 2005 |
.NET Framework | .NET Framework 2.0/3.0/3.5 |
Visual Studio | Visual Studio 2005/2008 |
事前準備
試用版のObjectServiceは、コデックスのWebサイトから入手可能です。
有償のコンポーネントですが、ダウンロードファイルに含まれている「setup.exe」を実行し、[ライセンス版をインストールする]のチェックを外すことで、試用版をインストールできます。制限事項などの詳細については、ダウンロードファイルに同梱されているマニュアルを参照ください。
環境設定などは過去の記事を参照してください。
リレーション設定
親子関係のオブジェクトを取り扱いたい場合、オブジェクトにリレーションを設定することで、それが可能となります。ここでは請求書(親)と明細(子)という関係を例にご紹介します。
まず初めに、以下のクラスを準備します。
プロパティ名 | 設定 | 内容 |
BillNo | プロパティ型をString キーをobjectKeyに設定 | 請求書No |
BillDate | プロパティ型をDateに設定 | 請求日 |
Customer | プロパティ型をCustomerに設定 | 請求先 |
DueDate | プロパティ型をDateに設定 | 支払日 |
BillItemCollection | プロパティ型をList(Of BillItem)に設定 | BillItemを内包 |
プロパティ名 | 設定 | 内容 |
ID | プロパティ型をInteger キーをobjectKey IDフィールドをTrueに設定 | 明細ID |
BillNo | プロパティ型をStringに設定 | 請求書No |
ProductCode | プロパティ型をStringに設定 | 商品コード |
UnitPrice | プロパティ型をIntegerに設定 | 単価 |
Quantity | プロパティ型をIntegerに設定 | 数量 |
ここでのポイントは「Bill」クラスの「BillItemCollection」のプロパティの型を「List(Of BillItem)」としていることです。「BillItemCollectionが子オブジェクトを内包する」ということを意味します。
次に、ダイヤグラム領域上で、「Bill」と「BillItem」にリレーションシップを設定します。ツールボックスから「リレーションシップの追加」を選択して、「Bill」から「BillItem」に対してマウスをドラッグすると、2つのオブジェクトが矢印で結ばれます。
矢印を選んで、VisualStudio上のプロパティを確認すると「キーの編集」という項目があり、選択すると「RelationKeyコレクションエディタ」画面が表示されます。
本画面の「PrimaryKey」「ForeignKey」で、リレーションを関連付けるプロパティを選択してください。ここではそれぞれに「BillNo」を設定します。「BillクラスのBillNoとBillItemクラスのBillNoが一致している場合は親子関係が成り立つ」という設定をしたことになります。
以上で、リレーションの設定が終了しました。ObjectServiceを使うと、煩雑になりがちなリレーション設定も容易に行うことが可能です。
データの保存
次に、リレーション設定したオブジェクトを基に、データを保存してみます。子オブジェクト(BillItem)を親オブジェクト(Bill)にAddし、親オブジェクトをSaveObjectに渡します。
'請求書 Dim bill As New Bill bill.BillNo = "200709-01" bill.BillDate = Now.Date bill.Customer = "株式会社コデックス" bill.DueDate = Now.Date.AddDays(30) '明細をつ追加 Dim item As BillItem item = New BillItem item.ProductCode = "プリンター" item.Quantity = 1 item.UnitPrice = 40000 bill.BillItemCollection.Add(item) item = New BillItem item.ProductCode = "トナー" item.Quantity = 2 item.UnitPrice = 3500 bill.BillItemCollection.Add(item) '保存処理 _ObjectService.SaveObject(bill)
複雑なSQL文は必要ありません。「親子関係を取り扱う場合も、シンプルなソースコードで解決できる」と感じられるのではないでしょうか。