Pregunta

Mientras que jugar un poco con las asociaciones uno-a-uno en el castillo de activerecord me topé con el siguiente problema:

Estoy tratando de modelar una relación uno-a-uno (fácil de perfil de usuario en este caso). Ya aprendí que esto puede no ser una buena práctica, pero vamos a pasar por alto que por un momento (todavía estoy tratando de entender lo que está pasando).

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

Yo esperaría que el siguiente código para guardar un usuario con perfil, produciendo el mismo ID en la base de datos:

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

        profile.Save();

    }

El resultado real sin embargo es que ambos objetos se guardan con una clave diferente. Me estoy perdiendo algo ??

¿Fue útil?

Solución

He encontrado la respuesta a mí mismo. El PrimaryKeyType del lado de la relación donde OneToOne está definida debe tener una 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; }

 }

Volver a la lectura de la documentación más a fondo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top