2009-11-10 7 views
1

Tout en jouant avec un à-un dans activerecord du château, je suis tombé sur le problème suivant:Castle ActiveRecord: un à un

Je suis en train de modéliser un-à-un (utilisateur -userprofile dans ce cas). J'ai déjà appris que ce n'est peut-être pas une bonne pratique, mais ignorons cela un instant (j'essaie toujours de comprendre ce qui se passe).

[ActiveRecord] 
public class TestUser : ActiveRecordBase<TestUser> 
{ 
    [PrimaryKey(PrimaryKeyType.GuidComb)] 
    public Guid Id { get; set; } 


} 

[ActiveRecord] 
public class TestUserProfile : ActiveRecordBase<TestUserProfile> 
{ 
    [PrimaryKey(PrimaryKeyType.GuidComb)] 
    public Guid Id { get; set; } 

    [OneToOne(Cascade = CascadeEnum.All, Fetch = FetchEnum.Join)] 
    public TestUser User { get; set; } 
} 

je me attendrais le code suivant pour enregistrer un utilisateur avec le profil, ce qui donne le même identifiant dans la base de données:

[Test] 
    public void save_profile_saves_user() 
    { 
     var profile = new TestUserProfile 
     { 
      User = new TestUser() 
     }; 

     profile.Save(); 

    } 

Le résultat réel est cependant que sont enregistrés les deux objets avec une autre touche. Ai-je manqué quelque chose ??

Répondre

3

J'ai trouvé la réponse moi-même. Le PrimaryKeyType du côté de la relation où OneToOne est défini devrait avoir un PrimaryKey de PrimaryKeyType.Foreign:

[ActiveRecord] 
public class TestUserProfile : ActiveRecordBase<TestUserProfile> 
{ 
    [PrimaryKey(PrimaryKeyType.Foreign)] 
    public Guid Id { get; set; } 

    [OneToOne(Cascade = CascadeEnum.All, Fetch = FetchEnum.Join)] 
    public TestUser User { get; set; } 

} 

Retour à la lecture des documents plus à fond ...

Questions connexes