私たちは、MSSQLデータベースから「データベースファースト」アプローチで生成された複数のプロジェクト/アセンブリにわたっていくつかの関連するドメインモデルを生成できるようにするORM/ドメインモデリングツールを求めています。どのツールが私たちのニーズを満たすかを理解するために、いくつかの助けが必要です。
要件は次のとおりです。
プロジェクト間の関係
- 私たちのドメインは多数のモジュールに分割されており、クライアント(ソースコードを提供するクライアント)ごとにすべてのモジュールを使用するわけではないため、クライアントが表示したりアクセスしたりする必要のないすべてのロジックを「プラグを抜く」必要があります。 。
- たとえば、共有データ(主に一般的なルックアップ情報)を独自の共通アセンブリに格納する必要があります。
- モデル間に双方向の関係は必要ありません(循環参照が発生するため)。子の関係の終わりのみが生成されます。
プロジェクト間の継承
- 上記と同様に、共通の機能を1つのドメインモデルの基本クラスに抽象化し、それらを継承できるようにする必要があります。
- 注:ドメイン間の継承リンクは制限され、サブドメインごとに1つまたは2つだけになります。
- 注:問題ではありませんが、「タイプごとのテーブル」または「クラステーブル継承」を使用して、リレーショナル(DB)スキーマで継承をモデル化しています。
生成されるクラスは次のとおりです。
- DataContract/DataMember属性でマークされています
- プロパティの変更を通知する(INotifyPropertyChanged実装を介して)
- 部分的なOn*PropertyName * Changed()メソッドがあります(たとえば、Linq toSQLおよびEntityFrameworkで生成されたオブジェクトに従って)
- (理想的ですが、必須ではありません)関連するコレクションタイプは、INotifyCollectionChangedを実装する必要があります。
これらの基準をサポートする(またはサポートするための回避策がある)ORMツールに関するフィードバックをいただければ幸いです。
注:これまで見てきたツール(ただし、これで完全に除外されるわけではありません):
- LightSpeed(素敵ですが、プロジェクト間の継承を簡単にサポートしていません)。
- LLBLGen(複雑ですべてを網羅していますが、
AsSeparateProjects
モードを使用してグループ化すると、継承はもちろん、モデル間の関係もサポートされていないようです)。 - Entity Framework(私は迷子になりました...ドメインを複数のモデルに分割したときのデザイナーの話はあまり良くありませんでした)。