NHibernate를 사용하기 위해 이전 CMS를 업그레이드하려고하고 있으며 원래 데이터베이스 구조를 많이 방해 할 수 없습니다. 다음은 문제의 원인이되는 비트입니다.런타임에서 일대일 관계 매핑
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 {
}
재산상의 난 다음 두 테이블을 말해봐 기사 클래스. 그러나 응용 프로그램에서 나는 관리자가 기사에 적용되는 구성 요소를 활성화/비활성화 할 수 있습니다. 또한 나는 그들이 기사 클래스를 건드리지 않고 자신의 구성 요소를 추가하는 응용 프로그램을 확장하고 싶습니다.
이유 때문에 내가 기사 클래스에 대한 속성을 추가 할 수 없습니다.
이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 *를 기사 INNER 가입 메타 ON Articles.Id = 메타 FROM .ArticleId Where Meta.Keywords LIKE '% Some Word %'
Meta를 얻기 위해 내부 조인을 수행하도록 Component 메서드를 매핑 할 수 있습니까? 개념은 매우 단순 해 보이지만 어디서부터 시작해야할지 모른다. 나는 정말 도움을 주셔서 감사합니다.
감사합니다.
"... 관리자가 구성 요소를 활성화/비활성화 할 수 있습니다 ..."라는게 무슨 뜻입니까? –