[英]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.