우리는 다음과 같은 데이터베이스 구조를 가지고 :유창함 NHibernate에 매핑 조회 테이블에서 설명을 반환
UserTeam table
Id (PK, int not null)
UserId (FK, int, not null)
TeamId (FK, int, not null)
RoleId (FK, int, not null)
libRole table
Id (PK, int not null)
Description (varchar(255), not null)
을 다음과 같이 우리는 엔티티를 가지고 :
public class UserTeam
{
public int Id { get; set; }
public Team Team { get; set; }
public User User { get; set; }
public int RoleId { get; set; }
public string Role { get; set; }
}
을 우리는 유창함 자 NHibernate를 사용하여 자동으로 NHibernate에를 구성하는 (즉, 오버라이드가있는 오토 메이션 클래스 사용).
우리는 libRole 테이블의 설명 열을 UserTeam 테이블의 "Role"속성으로 가져 오려고하지만 실제로 어려움을 겪고 있습니다. 다음은 우리가 가지고 가장 가까운 :
SELECT
TOP (@p0) this_.Id as Id70_0_,
this_.RoleId as RoleId70_0_,
this_.TeamId as TeamId70_0_,
this_.UserId as UserId70_0_,
this_1_.Description as Descript2_71_0_
FROM
[UserTeam] this_
inner join
libRole this_1_
on this_.Id=this_1_.Id;
닫기하지만, NHibernate에 조인에 UserTeam 테이블과 libRole 테이블 모두에서 ID 열을 사용하는 다음 SQL을 생성
public class UserTeamMap : IAutoMappingOverride<UserTeam>
{
public void Override(FluentNHibernate.Automapping.AutoMapping<UserTeam> mapping)
{
mapping.References(m => m.User).Column("UserId");
mapping.References(m => m.Team).Column("TeamId");
mapping.Join("Role", join =>
{
join.Fetch.Join();
join.KeyColumn("Id");
join.Map(x => x.Role, "Description");
});
}
}
, 언제해야하는지 this_.RoleId=this_1_.Id
우리가 무엇이 빠져 있습니까? 우리가 정말로 신경 쓰는 것은 설명 값입니다. 이것은 사용자가 구성 할 수 있기 때문에 열거 형을 사용할 수 없기 때문에 우리는 실제로 응용 프로그램 내에 "libRole"엔티티를 만들고 싶지 않습니다. 누구든지 도와 줄 수 있습니까?
감사합니다. penfold. 수식 루트에 대해 생각했지만 언급 한 이유와 SQL 결합만큼 효율적이지는 않을 것입니다 (libRole 테이블에서 수백만 행을 다루지는 않지만 여전히 그렇습니다).). NHibernate가 둘 이상의 테이블에서 엔티티에 대한 데이터를 읽도록하는 방법이 없다는 것은 이상한 것 같습니다. – MajorRefactoring
외래 키로 가입 할 수없는 것 같습니다. 오픈 한 이슈가 있습니다. [NH-1452] (https://nhibernate.jira.com/browse/NH-1452) 및 [NH-3143] (https://nhibernate.jira.com/browse/NH-3143)을 참조하십시오. 이 기능을 추가하기위한 일부 [작업 완료] (https://github.com/Nicaog/nhibernate-core/tree/NH-1681)가 있지만 트렁크와 병합되지 않았습니다. – mickfold
정말 그 주위에 방법이 없을 것 같네요. 결국 우리는 실제로 어디서나 사용되지 않았으므로 객체에서 Role 속성을 제거했습니다. 이는 10 년 전에 찍은 디자인 결정에서 숙취였습니다 ... 그래서 이것을 대답으로 표시했습니다. nhibernate가 어떤 시점에서 그것을 수용한다는 것을 알기에 좋은데 - 우리가 실제로 그것을 원한다면 우리는 포크를 잡고 스스로 고쳐야 할 수도 있습니다. :) – MajorRefactoring