테이블을 추가 할 때 다 테이블과 참조를 가진 을 삭제하려고 할 때 다 대다 관계가있다. 에서 AB 오류 아래 표는 발생합니다Fluent NHibernate - 추가 테이블이 많을 경우 - null 값을 삽입 할 수 없다. 삭제 중에 예외가 발생한다.
내 데이터베이스 스키마 :$ 예외가 { ": [A.AB # 20] 컬렉션을 삭제할 수 없습니다 [SQL을 : UPDATE AB SET 원조 = 널 WHERE 원조 = @ P0]" } NHibernate.Exceptions.GenericADOException
열 'AId'에 NULL 값을 삽입 할 수 없습니다. 테이블 'AB'; 열 은 널을 허용하지 않습니다. UPDATE가 실패합니다. 그 진술서는 만료되었습니다.
내 클래스 :
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();
의 레코드를 삭제하고 싶습니다. AB 테이블에있는 테이블과 모든 관련 레코드를 삭제하고 싶습니다.
가장 간단한 해결책은 AB 테이블 널 (NULL)에 도움 및 입찰을 확인하는 것입니다하지만 난 거기에 더 나은 솔루션이며이 매핑에서 해결 될 수 있다고 생각합니다.
이
같은 문제를 :( – gabrieln