سؤال

أثناء اللعب مع جمعيات واحدة إلى واحدة في Castle 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; }
}

أتوقع التعليمة البرمجية التالية حفظ مستخدم مع ملف التعريف، مما يؤدي إلى نفس المعرف في قاعدة البيانات:

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

        profile.Save();

    }

والنتيجة الفعلية هي أن كلا الكائنات يتم حفظها بمفتاح مختلف. هل فاتني شيء؟؟

هل كانت مفيدة؟

المحلول

لقد وجدت الإجابة نفسي. يجب أن يكون لدى PrimaryKeyType من جانب العلاقة حيث يتم تعريف Onetoone على أهلية من PrimanyKeyKeyPe.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; }

 }

العودة إلى قراءة المستندات أكثر جيدا ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top