Question

Alors que jouer avec un à-un dans activerecord du château je suis tombé sur le problème suivant:

Je suis en train de modéliser un-à-un (utilisateur-userprofile dans ce cas). Je l'ai déjà appris que ce ne peut pas être une bonne pratique, mais Ignorons que pour un moment (je suis encore à essayer 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 attends 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 les deux objets sont enregistrés avec une autre touche. Est-ce que je manque quelque chose ??

Était-ce utile?

La solution

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 en détail ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top