簡易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のリレーションとして記述しておきます