2010-06-24 6 views
1

J'utilise « Class Héritage de Table - En utilisant les sous-classes jointes » comme décrit ici: http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.htmlCastle ActiveRecord JoinedKey n'est pas défini

Le code suivant est en partie copié à partir de là.

[ActiveRecord("entity"), JoinedBase] 
public class Entity : ActiveRecordBase 
{ 
    ... 
    private int id; 

    [PrimaryKey] 
    private int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
} 

[ActiveRecord("entitycompany")] 
public class CompanyEntity : Entity 
{ 
    private int comp_id; 

    [JoinedKey("comp_id")] 
    public int CompId 
    { 
     get { return comp_id; } 
     set { comp_id = value; } 
    } 
    .... 
} 

Maintenant, quand j'ai un CompanyEntity chargé et accéder à la propriété ComId il est toujours 0, mais l'ID hérité de la propriété contient la valeur correcte.

Edit:

Je ne devrais probablement ajouter que nos entités sont génèrent automatiquement et je ne veux pas toucher le générateur.

Edit2:

Ok, je me rends compte que je dois toucher le générateur afin de le faire fonctionner. Mais encore pourquoi Active Record ne définit-il pas le Comp_id?

Question:

Comment puis-je dire ActiveRecord pour régler également la valeur de la JoinedKey dans la classe des enfants afin que compid == Id?

Répondre

0

Je pense que vous devez utiliser:

[JoinedKey("comp_id")] 
public override int Id { get { return base.Id; } } 

... et l'exemple qu'ils donnent est faux.

0

C'est une vieille question, mais j'ai rencontré le même problème. L'exemple de la page Castle.ActiveRecord est incorrect.

Vous pouvez résoudre le problème comme celui-ci (votre exemple de code avec des modifications commentées):

[ActiveRecord("entity"), JoinedBase] 
public class Entity : ActiveRecordBase 
{ 
    ... 
    protected int id; // use protected instead of private 

    [PrimaryKey] 
    private int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
} 

[ActiveRecord("entitycompany")] 
public class CompanyEntity : Entity 
{ 
    // private int comp_id; // this member variable is not required 

    [JoinedKey("comp_id")] 
    public int CompId 
    { 
     get { return id; } // access the member variable of the base class 
     set { id = value; } // access the member variable of the base class 
    } 
    .... 
} 

Je l'ai juste testé avec succès avec ma hiérarchie de type.

Questions connexes