- PR -

DB関連クラスの作成方法(ORマッピングなど)

投稿者投稿内容
ちゃんこ
会議室デビュー日: 2004/01/11
投稿数: 10
投稿日時: 2004-01-11 22:23
はじめまして。
C#でDBを読み込むアプリケーションを作成しようとしています。

通常であれば、SQLを書いてデータを取ってくると思うのですが
わざわざ、DB層にあたる永続化クラスを手で書くのは大変だなぁと思いました。

JavaではJDOやCMP(EJB)といったアーキテクチャが用意されていますが
.NETにはそういうOR(Object-Relation)マッピングする
仕組みは用意されていないのでしょうか?

皆さんはどのように開発されているのでしょうか。
良いアイデア等あれば教えてください。


小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-01-12 18:35
DB層にあたる永続化クラスとしてどのようなものを
想定されているのでしょうか?

DataSetでは考えているものと違うのでしょうか。
ちゃんこ
会議室デビュー日: 2004/01/11
投稿数: 10
投稿日時: 2004-01-20 03:15
返事が遅くなりました。
DataSetはDBにアクセスする汎用的なクラスですよね。
私が探している永続化クラスというのは、
テーブル1つにつき1つ(以上)作られるようなクラスです。

-------------------------
EmployeeID int    4
LastName  nvarchar 20
FirstName   nvarchar 10
BirthDate   datetime  8
-------------------------

たとえば、上記のEmployeesというテーブルを例にとれば、

@データ挿入[Insert]
Employee emp = new Employee(); //新規レコードの作成
emp.setLastName("田中");
emp.setFirstName("洋介");
emp.setBirthDaty(1975/01/19);
emp.Store(); //保存

Aデータ取り出し[Select]
 Employee emp = new Employee()
 emp.LoadByKey(27); //IDでDBから呼び出し
 Form1.txtName = emp.getLastName() + emp.getFirstName();

こんな感じでわざわざSQLを書かなくても
CRUDが簡単にできるEmployeeクラスを
自動生成してくれるツール等がないかと思ったのです。

やはり、ないんでしょうか。。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-01-20 09:56
Employeesというテーブルが既に存在しているなら

デザイナでEmployeesテーブルにアクセスするDataAdapterを作成して
DataAdapterからDataSetの派生クラスを作成するとそのDataSetの中に
EmployeesというDataTableの派生クラスが作成されます。

DataAdapterを作成するときにSelect条件のSQLは設定しなくてはいけないのですが
これではだめですか?

もしくは新規DataSetをプロジェクトに追加してEmployeesのスキーマを自分で登録しても
DataSetの派生クラスとEmployeesというDataTableの派生クラスが作成されます。

DataSetはデータの集まりを表すクラスでDBにアクセスするのはDataAdapterクラスです。



[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-01-20 10:03 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-01-20 10:11
ソリューションエクスプローラで
プロジェクトファイルを選択して右クリックし

@[新規項目の追加]をクリック
A[データセット]を選択し
Bサーバエクスプローラ上に表示されているテーブルをドラッグ&ドロップし
C[保存]すると、

求めているクラスが生成されます。
ただし、ゆうじゅんさんの発言にもあるとおり、実際にデータを取得したり更新したりする作業はDataAdapterの領分なので、DataAdapter作成時にSQLの設定は必要です。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-01-20 10:32
>Bサーバエクスプローラ上に表示されているテーブルをドラッグ&ドロップし

これは知りませんでした。
勉強になりました。ありがとうございます。
hiro
会議室デビュー日: 2003/11/04
投稿数: 13
投稿日時: 2004-01-26 16:37
こんにちわ。
厳密にいう、JavaのOJBのようなブリッジは無いと認識してます。
私は、基本的なDBコントローラコンポーネントを用意してOJBのようなインターフェースを
実装させて使用しています。

よく使用するテーブル等で、メンテナンスに使用したり、いろいろControl内で
業務ロジックを実装する場合は、このコンポーネントを使用しています。

#このスレッドの上部によくcache'の広告が入ってますが、
#OODBなのですが、ちゃんこさんの希望のDB層にあたる永続化クラスが
#実装されています。JAVA+OJBを使用してる方はかなり使いやすいDBだと。。
#私は好きですが、M言語と製品版の高価さがネックですw

masas
常連さん
会議室デビュー日: 2002/05/23
投稿数: 25
投稿日時: 2004-01-26 17:29
FormのコントロールオブジェクトとDataSet(実際にはデータベースプロバイダーを抽象化したクラスが介在する)間で、簡単にCRUDするクラスたちを個人的につくりました。
(1行もSQL文を書かずに済みます)
MFCを知っている人ならわかるかもしれませんが、DDXのForm<=>DBみたいなかんじに定義できます。
おまけにDBの制約(NOT NULLや文字列の長さ)などのValidationCheckもします。
これを自作したことによって、ASP.NETの開発速度が飛躍的に向上しました。

スキルアップ/キャリアアップ(JOB@IT)