NHibernateを使用するために古いCMSをアップグレードしようとしているので、元のデータベース構造を大幅に妨げることはできません。ここに問題を引き起こしているビットがあります。実行時に1対1の関係をマップする
Articles:
- Id (PK, Identity)
- Title
- Content
Meta:
- ArticleId (PK, FK to Articles)
- Description
- Keywords
私が作成した以下のクラス:通常のメタは、通常、コンポーネント(または1対1の関係)としてマップされます
public class Article {
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Content { get; set; }
}
public class Meta : IComponent {
public virtual string Description { get; set; }
public virtual string Keywords { get; set; }
}
public interface IComponent {
}
財産上の私は、次の2つのテーブルを持っていると言います記事クラス。しかし、私は管理者を構築するアプリケーションでは、記事に適用されるコンポーネントを有効/無効にすることができます。また、私は彼らがArticleクラスに触れることなく独自のコンポーネントを追加するためにアプリケーションを拡張したいと思います。
私はArticleクラスに対してプロパティを追加することはできません。今、理想的に私のコードでは、私が言うことができるしたいと思います:
次のSQL(または類似)を生成するvar articles = session.Query<Article>()
.Fetch(a = a.Component<Meta>())
.Where(a => a.Component<Meta>().Keywords.Contains("Some Word"))
.ToList();
// This wouldn't generate an extra SQL statement
var keywords = articles[0].Component<Meta>().Keywords;
を:
SELECT * FROM記事INNERメタON Articles.Id =メタを登録しよう.ArticleId Meta.Keywords LIKE '%Some Word%'
Metaを取得するために内部結合を行うようにComponentメソッドをマップすることは可能ですか?このコンセプトはかなりシンプルなようですが、どこから始めるのか分かりません。私は本当に助けに感謝します。
ありがとう
「...管理者はコンポーネントを有効/無効にすることができます...」とはどういう意味ですか? –