1

在玩城堡 activerecord 中的一对一关联时,我偶然发现了以下问题:

我正在尝试建模一对一的关系(在这种情况下是用户-用户配置文件)。我已经了解到这可能不是最佳实践,但让我们暂时忽略这一点(我仍在尝试了解发生了什么)。

[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();

    }

然而,实际结果是两个对象都使用不同的密钥保存。我错过了什么吗?

4

1 回答 1

3

我自己找到了答案。定义 OneToOne 的关系一侧的 PrimaryKeyType 应该具有 PrimaryKeyType.Foreign 的 PrimaryKey:

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

 }

回到更彻底地阅读文档......

于 2009-11-10T22:52:41.960 回答