면책 조항 : 나는 일반적으로 NH & ORM을 아주 좋아한다.Optional SubclassMap (left join) with NHibernate 3.0 GA & FNH
면책 조항 : NH3.0GA와 함께 사용하려면 here에서 FNH 빌드로 작업하고 있습니다.
public class MyBaseClass {
public virtual int Id { get; set; }
}
public class MySubClass : MyBaseClass {
public virtual string SubClassVal { get; set; }
}
이 :
요컨대 문제는 내가 테이블 당 서브 시나리오로 정의 내 객체 계층 구조에 조인 LEFT를 매핑하는 방법으로 FNH의 SubclassMap
를 사용하고자하는 것입니다 로 FNH를 통해 매핑됩니다 :
public class MyBaseClassMap : ClassMap<MyBaseClass> {
public MyBaseClassMap() {
Table("BaseClass");
Id(x => x.Id, "Id").GeneratedBy.Assigned();
}
}
public class MySubClassMap : SubclassMap<MySubClass> {
public MySubClassMap() {
Table("SubClass");
KeyColumn("Id");
Map(x => x.SubClassVal);
}
}
그리고 난을 통해 검색 :
public class Repository {
ISession session; //assume properly initialized ISession
public IList<T> GetAll<T>() where T: class {
return session.CreateCriteria<T>().List<T>();
}
}
그리고 내 데이터베이스에서 BaseClass
테이블에 1 레코드가 있고 0 레코드는 SubClass
입니다.
은, 내가 뭘하고 싶은 이런 일을 수행하여 MySubClass
인스턴스로 엔티티를 꺼내입니다 :
var rep = new Repository();
var subclasses = rep.GetAll<MySubClass>();
그리고 이것은 아마도 같이 물론, 반환 된 컬렉션에는 인스턴스가 없습니다 그것 아래의 내부 결합을 수행합니다. 내가 붙어있는 곳이야. 나는 '선택적인'조인을 지정하는 것이 내가 이라고 가정하고을 수행한다는 것을 발견했습니다.
public class MySubClassMap : SubclassMap<MySubClass> {
public MySubClassMap() {
Join("SubClass", j => {
j.KeyColumn("Id");
j.Optional();
j.Map(x => x.SubClassVal); // note that I've tried the map outside the Join() below, to no avail
});
//Map(x => x.SubClassVal);
}
}
컴파일 /이를 실행하면 다음과 같은 (안쪽)을 제외하고 저를 제시한다 :
요소 '에 합류-서브 클래스'네임 스페이스 '항아리 : NHibernate에-mapping- 난에 MySubClassMap
을 수정하려고 시도했습니다 2.2 '는 네임 스페이스'urn : nhibernate-mapping-2.2 '에서 유효하지 않은 하위 요소'join '을가집니다. 예상 가능한 요소 목록 : '속성, 다 대일, 일대일, 구성 요소, 동적 구성 요소, 속성, 임의,지도, 집합, 목록, 자루, idbag, 배열, 프리미티브 배열, 조인 된 하위 클래스 , loader, sql-insert, sql-update, sql-delete, resultset, query, sql-query '네임 스페이스'urn : nhibernate-mapping-2.2 '에 있습니다.
내가 스택 추적을 게시 절약 할 수 있지만, 그것의 JIST은 다음과 같습니다
이MyApp -->
FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() -->
NHibernate.Cfg.FluentConfiguration.BuildConfiguration()
나는 모든 관련 정보의 그 생각 . 나는이 새 버전의 NH와 FNH 버전 사이의 새로운 변화가 아니라는 생각이 든다. 그러나, 앞서 언급했듯이, 나는 신참이며 어리석은 일을 잘 할 수 있습니다. 이 경우, 누군가가 분명히해야 할 일로 머리를 두드리는 것을 매우 고맙게 생각합니다.
미리 감사드립니다.
나는 어색하다고 생각했습니다. 나를 분류 해줘서 고마워. – Devfellow