![](/img/trans.png)
[英]Handling a one-to-many relationship with value types in Fluent NHibernate
[英]Fluent nHibernate: one-to-many relationship Issue
我有一對多關系的問題。 我有以下域類:
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; }
}
我根據以下帖子制作了Entity基類。 我定義了以下映射:
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 Profiler並且機構被保存在數據庫中但是它們的InstallationId為空。 有人能告訴我我做錯了什么嗎?
當你有一個使用inverse="false"
的持久集合時,父對象擁有該關系,對父集合的任何更改都將反映在數據庫中。
當你有一個使用inverse="true"
的持久集合時,子對象擁有該關系,並且對子對父對象的引用的任何更改都將反映在數據庫中。
因為你設置inverse="true"
,你需要更改子對象對父對象的引用,以便NHibernate接受它。 如果您希望NHibernate在添加子項或從父項集合中刪除子項時接收關系的更改,則必須在集合上設置inverse="false"
。
您必須手動設置機構的安裝屬性,具體而言,
Installation installation = TestHelper.CreateAnonymousInstallation();
Institution institution = TestHelper.CreateAnonymousInstitution();
institution.Installation = installation;
installation.Institutions.Add(institution);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.