抽象的なドキュメントエンティティと複数の派生エンティティ(ブログ、ページなど)を使用して、階層ごとのテーブルエンティティデータモデルを実装しました。私は唯一のリポジトリを実装する1つのクラスを持ち、メソッドから復帰するタイプとして文書を使用してこのEntity Frameworkとリポジトリパターンを使用した階層ごとのテーブル
public Document Load(Guid firmId, int prettyId)
{
// the OfType<> can be OfType<Page>, OfType<Blog>, ...
var instance = (from c in _ctx.Documents.OfType<X>() where c.firm_id == firmId && c.PrettyId == prettyId select c).FirstOrDefault();
...
}
ような文書実体を使用してメソッドのシグネチャとのリポジトリインターフェースを有しています。ロード、挿入、および更新の実装仕様がすべて同じであるため、Documentから派生したさまざまな型のカスタム実装は必要ありません。私は、作業したいメソッドに型を識別/提供する必要があります。
私が言っていることを理解していただければと思います。 TPHをモデル化する方法については、私がすでに行っているので参考にしてください。それはモデル化されています。
うん、これは私がしていることです。任意のタイプの多型(例:抽象クラス)を使用する場合、ジェネリックスは良いケースです。あなたのインターフェースに関しては、第1のコメントと第2のコメント(コメントアウトされたもの)の間に違いはありません。 1つはTの型パラメータ/制約を持ち、もう1つはT1を持つ。これらは型パラメータのエイリアスです。何でも構いませんが、違いはありません。あなたの場合、私はそれらをより明示的にするために 'TDocument'と命名します。あなたの実装については、そこにあるすべての型に対して '.Load()'を実行しません。メソッドのシグネチャはそれを行うことを指示していないためです。私は拡張メソッドを使ってそれを行います。 – RPM1984
ああ、これもあなた自身のために考えています - +1。 – RPM1984
参照の読み込みのための拡張メソッドのサンプルを提供できますか? – mare