簡體   English   中英

流利的NHibernate:外鍵不為空的問題

[英]Fluent NHibernate: foreign key not null problem

我有以下域類:

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").Cascade.All();
    }
}

當我運行以下代碼時:

Installation installation = TestHelper.CreateAnonymousInstallation();
installation.Institutions.Add(TestHelper.CreateAnonymousInstitution());
installation.Institutions.Add(TestHelper.CreateAnonymousInstitution());
session.Save(installation);

我收到以下錯誤:

NHibernate.PropertyValueException:not-null屬性引用一個null或瞬態值。

如何克服這個問題?

在此先感謝Lukasz Glaz

我認為需要的是inverse = true。

HasMany<Institution>(i => i.Institutions)
   .KeyColumnNames.Add("InstallationId")
   .Cascade.All()
   .Inverse();

或者,當然要在安裝類中添加一個方法來顯式地處理此問題。

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 virtual void AddInstitution(Institution entity)
    {
        entity.Installation = this;
        Institutions.Add(entity);
    }
}

如我所見,您的Institution類具有Installation類的參考。 並且此引用設置為不為null。 創建AnonymousInstitution時,是否為其設置了一些Installation?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM