我想升級舊的CMS來使用NHibernate,並且不能從原始數據庫結構中遏制太多。這是造成問題的位。說我有以下2個表:在運行時映射一對一關係
Articles:
- Id (PK, Identity)
- Title
- Content
Meta:
- ArticleId (PK, FK to Articles)
- Description
- Keywords
我已經創建了以下類:
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 {
}
一般的元通常會被映射爲組件(或以一對一的關係)屬性對文章類。然而,在構建管理員的應用程序中,可以啓用/禁用適用於文章的組件。另外,我希望他們擴展應用程序以添加他們自己的組件,而無需觸及Article類。
由於他們的原因,我不能添加屬性對文章類。現在,在我的代碼理想我想能夠說:
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;
這將生成的SQL語句(或類似):
SELECT * FROM文章INNER JOIN元ON Articles.Id =元.ArticleId WHERE Meta.Keywords LIKE'%Some Word%'
是否可以映射Component方法,以便它進行內部聯接以獲取元。這個概念看起來很簡單,但我從頭開始並不知道。我真的很感激幫助。
謝謝
請問,這是什麼意思「...管理員可以啓用/禁用組件...」? –