2009-11-05 6 views
0

Fluentnhibernate로 인터페이스 및 콘크리트 클래스를 매핑하려고합니다. 여기 FluentNHibernate로 인터페이스 및 콘크리트 클래스 매핑하기


public interface IUser 
{ 
    int Id { get; set; } 
} 

public class User: IUser 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Password { get; set; } 
} 

내 매핑 파일입니다 : 여기

내 인터페이스/클래스의


public class IUserMap: ClassMap 
{ 
    public IUserMap() 
    { 
    Table("User"); 

    Id(u => u.Id) 
     .Column("Id") 
     .GeneratedBy.Native(); 
    } 
} 

public class UserMap: SubclassMap 
{ 
    public UserMap() 
    { 
    Map(u => u.Name); 
    Map(u => u.Password); 
    } 
} 

나는이 오류 얻을 :

 
could not execute query 
[ SELECT this_.Object_id as Id3_0_, this_.Name as Name4_0_, this_.Password as Password4_0_ FROM "User" this_ inner join User this_1_ on this_.Object_id=this_1_.Id WHERE this_.Name = @p0 ] 
Positional parameters: #0>test 
[SQL: SELECT this_.Object_id as Id3_0_, this_.Name as Name4_0_, this_.Password as Password4_0_ FROM "User" this_ inner join User this_1_ on this_.Object_id=this_1_.Id WHERE this_.Name = @p0] 

...

통지를 "this_.Object_id"열은 그 것이다. for ... 내 ID 열이 아니지만 Id ("my_id_column")를 지정할 수 없습니다. SubclassMap에서

내가 뭘 잘못하고 있니?

답변

2

어떤 종류의 상속 전략을 매핑하려고합니까? 클래스 당 테이블 또는 클래스 별 테이블? 현재 매핑은 클래스 당 테이블을 의미합니다.

어느 쪽이든, 나는 뭔가 잘못되었다고 생각합니다. Object_id은 외래 키 이름이며 부모 클래스의 이름을보고 빌드해야합니다. 내 생각 엔 인터페이스를 "부모"로 취급하지 않는다는 것입니다.

먼저, 문제 목록에서 문제를 제기하거나 메일 링리스트에 올리는 것이 좋습니다. 거기에 레이더가 더있을 것입니다.

둘째, 명시 적으로 열 이름을 지정해 볼 수도 있지만 언급 한 부모 문제와 관련하여 다른 영향이 있을지는 알 수 없습니다. 그것을 지정하려면 KeyColumn("Id")해야합니다.

+0

내 자식 SubclassMap에 KeyColumn ("Id")을 추가하면 이 작동합니다. object_id 문제 티켓도 열어 둡니다. 감사합니다. 제임스! –

관련 문제