Castillo ActiveRecord: uno-a-uno
-
19-09-2019 - |
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 ??
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 ...