簡易ORMフレームワークを作成してみる(13)

データベースからDataSetへの読み出し

データベースからDataSetへの読み出しは、検索対象のテーブルの検索条件を指定し行います。このときに、実際のSQL文は型指定されたDataSetの情報から自動生成され検索されます。さらに、検索対象のテーブルに関連しているテーブル*1を自動的に検索して関連するデータを読み出します。この処理を繰り返すことで、型指定されたDataSetで記述されているテーブル全てを自動的に読み出していきます。

たとえば、以下のような型指定されたDataSetをスキーマとして、データベースを検索するシナリオを考えます。


[Test]
public void 典型的なFill処理条件付()
{
	TerritoriesDataSet schema = new TerritoriesDataSet();
	DataSetDataAdapter da = new SqlDataSetDataAdapter(schema.Territories);
	QueryObject qo = new QueryObject();
	qo.Filter = qo.Eq("TerritoryID", "01581");
	da.Fill(schema, qo);
	Assert.AreEqual(1, schema.Territories.Rows.Count);
	Assert.AreEqual(1, schema.Region.Rows.Count);
}

Territoriesテーブルをある条件で検索すると、Territoriesテーブルの検索結果に基づいて、自動的にRegionのテーブルが読み出されることになります。たとえば以下のようなSQL文が発行されます。

Select [TerritoryID],[TerritoryDescription],[RegionID] 
From [Territories] Where [TerritoryID] = '01581'

Select [RegionID],[RegionDescription] 
From [Region] Where ( ([RegionID] = '1') )

関連テーブルRegionの検索は単純に検索結果のTerritoriesテーブル上のRegionIDの値を利用して検索します。複数のRegionレコードが対応する場合は上記のRegionIDがORで結ばれた検索条件として現表現されます。

*1:テーブル間の関連は型指定されたDataSetのリレーションとして記述しておきます