سؤال

لدي مشكلة مع علاقات واحدة إلى كثير. لدي فئات المجال التالية:

public class Installation : Entity<Installation>
{        
    public virtual string Name { get; set; }
    public virtual IList<Institution> Institutions { get; set; }

    public Installation()
    {
        Institutions = new List<Institution>();
    }
}
public class Institution : Entity
{
    public virtual string Name { get; set; }
    public virtual string Address { get; set; }
    public virtual string City { get; set; }
    public virtual Installation Installation { get; set; }        
}

لقد صنعت الطبقة الأساسية للكيان وفقا لما يلي بريد. وبعد لدي التعيينات التالية المحددة:

public class InstitutionMapping : ClassMap<Institution> 
{
    public InstitutionMapping()
    {
        WithTable("Institution");
        Id(i => i.Id).GeneratedBy.Guid();
        Map(i => i.Name).Not.Nullable().WithLengthOf(50);
        Map(i => i.Address).Not.Nullable().WithLengthOf(50);
        Map(i => i.City).Not.Nullable().WithLengthOf(50);
        References(i => i.Installation).ColumnName("InstallationId").Not.Nullable().WithForeignKey();
    }
}

public class InstallationMapping : ClassMap<Installation>
{
    public InstallationMapping()
    {
        WithTable("Installation");
        Id(i => i.Id).GeneratedBy.Guid();
        Map(i => i.Name).Not.Nullable().WithLengthOf(50);
        HasMany<Institution>(i => i.Institutions).KeyColumnNames.Add("InstallationId").Inverse().Cascade.All();
    }
}

أنا وحدة اختبار إضافة مؤسسات إلى تثبيت بالطريقة التالية:

Installation installation = TestHelper.CreateAnonymousInstallation();
installation.Institutions.Add(TestHelper.CreateAnonymousInstitution());
installation.Institutions.Add(TestHelper.CreateAnonymousInstitution());
session.Save(installation);    
session.Flush();
session.Clear();
Installation returnedInstallation = session.Get<Installation>(installation.Id);
Assert.AreEqual(2, returnedInstallation.Institutions.Count);

أحصل على استثناء تأكيد لأن العدد الذي تم إرجاعه من المؤسسات هو 0. لقد راجعت في ملف تعريف SQL ويتم حفظ المؤسسات في قاعدة البيانات ولكن تثبيتها غير فارغ. يمكن أن يقول لي شخص ما ما أفعله خطأ؟

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

المحلول

عندما يكون لديك مجموعة مستمرة مع inverse="false", ، ثم يمتلك الكائن الأصل العلاقة وأي تغييرات على جمع الوالدين ستنعكس في قاعدة البيانات.

عندما يكون لديك مجموعة مستمرة مع inverse="true", ، ثم يمتلك الكائن الطفل العلاقة وأي تغييرات على مرجع الطفل إلى الوالد ستنعكس في قاعدة البيانات.

لأنك تحدد inverse="true", ، ستحتاج إلى تغيير مرجع كائن الطفل إلى الكائن الأصل من أجل التخلص من التخلص منه. إذا كنت ترغب في التخلص من التغييرات في العلاقة كلما قمت بإضافة الأطفال إلى أو إزالة الأطفال من مجموعة الوالدين، فيجب عليك تعيين inverse="false" في المجموعة.

نصائح أخرى

يجب عليك تعيين خاصية التثبيت يدويا للمؤسسة، وتحديدا،

Installation installation = TestHelper.CreateAnonymousInstallation();
Institution institution = TestHelper.CreateAnonymousInstitution();
institution.Installation = installation;
installation.Institutions.Add(institution);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top