最近、利用可能な .NET ベースの ORM を調べています。それぞれが 1 つまたは 2 つのキャンプに配置されることに気付きました。ある陣営では、データベースが最初に作成され、ORM はアプリケーションでデータベースにアクセスするためのより簡単な方法を提供します。2 番目の陣営では、オブジェクト モデルが最初に存在し、ORM によってオブジェクト モデルのデータベースへの永続化が容易になります。
ここで私は、ある陣営が他の陣営よりも優れているかどうかを尋ねたり、主張したりしているわけではありません。それぞれの設計方法論の理由が確かにわかります。私を苛立たせているのは、私が最近読んだすべてのチュートリアルと「入門」ドキュメントのうち、どれも出てきて、最初に「このツールは、既存のデータベース/オブジェクトモデルから始めていることを前提としています」と言うだけです. 私にとって、これは、ある ORM を使用するか、別の ORM を使用するかについて非常に基本的なことです。
それで、たくさん読んで、いくつかの「Hello World」プロジェクトを作成した後、調べた ORM でサポートされているワークフローに関する一連の箇条書きをまとめました。これらのツールを使用した経験のある人なら、私が間違った発言をしたり、本当に重要な点を完全に見逃したりしていないか教えてもらえますか? 具体的には、各ツールでデータベース スキーマまたはオブジェクト モデルを最初に使用する必要があるかどうかについての私の仮定が正しいかどうかを知りたいです。
- データベースが最初に存在する必要があります
- SQL Server でのみ動作します
- DataContext クラスは、クラスとデータベース間の読み取り/書き込みに使用されます
- DataContext は実際の物理クラスを返すか、動的型を使用してデータベース スキーマに基づいて型を自動的に作成できます。
- テーブル名をクラス名に、プロパティ名を列名にマッピングするデフォルトのマッピング
- マッピングは、各クラスに埋め込まれた属性を介してカスタマイズできます
- 最初にデータベースを作成する必要があります
- 多数のデータベース技術と連携
- クラスは、T4 テンプレートを使用して既存のデータベース スキーマから自動的に生成されます
- クラスが生成されると、データベースへの接続は完全に透過的になります
- クラスコンストラクターを呼び出すと、データベースにレコードが自動的に作成されます
- プロパティ値を変更すると、データベースが自動的に更新されます。
- クラス構造が最初に来るべきです
- 多数のデータベース技術と連携
- リポジトリ クラスが作成され、データベースに接続されます
- クラスがリポジトリに追加されると、データベース スキーマが自動的に作成および更新されます。
repo.Add<MyClass>(instance);
- リポジトリはリフレクションを使用してデータベース スキーマを作成/更新します
- 時間ごとにテーブルを作成し、プロパティごとに列を作成します
- データベースまたはクラス構造のいずれかを最初に作成できます
- 新しいクラス構造を既存のデータベースに一致させるためにマッピングを作成できます
- マッピングを使用して、データベース スキーマを自動的に生成できます
- 多数のデータベース技術と連携
- 最終アセンブリ内のクラスは、クラスとプロパティをテーブルと列にマップする NHibernate マッピング設定で属性付けされます
- マッピング構成を追加するには 2 つの方法があります
- バイナリに埋め込まれた XML ファイル、
<classname>.hbm.xml
- コードに追加された属性
- バイナリに埋め込まれた XML ファイル、
- 1 対 1、1 対 5、多対 1、多対多、継承などを含む高度なマッピング構成をサポートしています。