2009-11-05 5 views
0

J'essaie de mapper une interface et une classe concrète avec fluentnhibernate.Mappage d'une interface et d'une classe concrète avec FluentNHibernate

voici mon interface/classe:


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; } 
} 

voici mes fichiers de mappage:


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); 
    } 
} 

et je reçois cette erreur:

 
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] 

...

avis la colonne "this_.Object_id" c'est l ooking for ... ce n'est pas ma colonne ID, mais je ne peux pas spécifier un Id ("my_id_column"); dans la sous-classeCarte

Qu'est-ce que je fais mal?

Répondre

2

De quel type de stratégie d'héritage essayez-vous de mapper? Table-par-classe ou table-par-classe-hiérarchie? Votre mappage actuel implique une table par classe.

De toute façon, je pense que quelque chose ne va pas. Object_id est le nom de la clé étrangère, et il est censé être construit en regardant le nom de la classe parente. Je suppose que nous ne traitons pas l'interface en tant que «parent». Premièrement, je vous recommande de soulever un problème sur notre liste de problèmes, ou peut-être de cliquer sur la liste de diffusion. Ce sera un peu plus sur notre radar là-bas.

Deuxièmement, vous pourriez essayer de spécifier explicitement le nom de la colonne, mais je ne sais pas quelles autres répercussions il peut y avoir du problème parent que j'ai mentionné. Pour le spécifier, vous devriez juste faire KeyColumn("Id").

+0

en ajoutant KeyColumn ("Id") à mon enfant SubclassMap travaillé. Je vais aussi ouvrir un ticket pour le problème object_id. merci, james! –

Questions connexes