Замок ActiveRecord: один на один - PullRequest
1 голос
/ 11 ноября 2009

Играя с однозначными ассоциациями в активной записи замка, я наткнулся на следующую проблему:

Я пытаюсь смоделировать отношения один-к-одному (в данном случае user-userprofile). Я уже узнал, что это не может быть лучшей практикой, но давайте на мгновение проигнорируем это (я все еще пытаюсь понять, что происходит).

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

Я ожидаю, что следующий код сохранит пользователя с профилем, получив тот же Id в базе данных:

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

        profile.Save();

    }

Фактический результат, однако, заключается в том, что оба объекта сохраняются с разными ключами. Я что-то упустил ??

1 Ответ

3 голосов
/ 11 ноября 2009

Я нашел ответ сам. PrimaryKeyType стороны отношения, где определен OneToOne, должен иметь PrimaryKey из 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; }

 }

Вернуться к чтению документов более тщательно ...

...