Pergunta

Enquanto a brincar com one-to-one associações no castelo activerecord me deparei com o seguinte problema:

Eu estou tentando modelar um relacionamento one-to-one (user-userprofile neste caso). Eu já aprendi que isso pode não ser uma boa prática, mas vamos ignorar por um momento (eu ainda estou tentando entender o que está acontecendo).

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

Eu esperaria o seguinte código para salvar um usuário com perfil, produzindo o mesmo ID no banco de dados:

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

        profile.Save();

    }

O resultado real, porém, é que ambos os objetos são guardados com uma chave diferente. Estou faltando alguma coisa ??

Foi útil?

Solução

Eu encontrei a resposta sozinho. O PrimaryKeyType do lado da relação, onde OneToOne é definido deve ter um 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; }

 }

Voltar para ler os docs mais profundamente ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top