流利NHibernate的 - 多对多的附加表 - 不能插入值NULL在删除过程中的异常
问题描述:
我有一个多对多的关系与额外的表,当我试图删除一个A对象,它也有一个引用在AB下表发生错误:流利NHibernate的 - 多对多的附加表 - 不能插入值NULL在删除过程中的异常
$ {例外 “无法删除集合:[A.AB#20] [SQL: UPDATE AB SET援助= 空,援助= @ P0]” } NHibernate.Exceptions.GenericADOException
无法将值NULL插入到'AId'列中,' '表'AB';列 不允许有空值。更新失败。该语句已终止。
我的课:
public class A
{
public virtual int AId { get; protected set; }
public virtual IList<AB> AB { get; set; }
}
public class B
{
public virtual int BId { get; protected set; }
public virtual IList<AB> AB { get; set; }
}
public class AB
{
public virtual int ABId { get; protected set; }
public virtual A A { get; set; }
public virtual B B { get; set; }
public virtual int CustomProperty { get; set; }
}
我的映射:
public class AMap : ClassMap<A>
{
public AMap()
{
Table("A");
SchemaAction.None();
Id(x => x.AId)
.GeneratedBy.Identity();
HasMany(x => x.AB)
.KeyColumn("AId")
.Cascade.All();
}
}
public class BMap : ClassMap<B>
{
public BMap()
{
Table("B");
SchemaAction.None();
Id(x => x.BId)
.GeneratedBy.Identity();
HasMany(x => x.AB)
.KeyColumn("BId")
.Cascade.All();
}
}
public class ABMap : ClassMap<AB>
{
public ABMap()
{
Table("AB");
SchemaAction.None();
Id(x => x.ABId)
.GeneratedBy.Identity();
Map(x => x.CustomProperty)
.Not.Nullable();
References(x => x.A)
.Column("AId");
References(x => x.B)
.Column("BId")
.Cascade.None();
}
}
代码:
_session.BeginTransaction();
var a = _session.Get<A>(1);
foreach (var ab in a.AB) {
_session.Delete(ab);
}
_session.Delete(a);
transaction.Commit();
我想删除A表中的记录和AB表中的每个关联记录。
最简单的办法就是让援助和投标在AB表可空,但我认为这是一个更好的解决方案,它可以在映射来解决。
预先感谢您:)
答
试试这个:
HasMany(x => x.AB)
.KeyColumn("BId")
.Cascade.All()
.Inverse();
同样的问题:( – gabrieln