J'ai une relation many-to-many avec table supplémentaire et quand j'essaye de supprimer un objet A qui a également une référence dans AB tableau ci-dessous erreur se produit:Fluent NHibernate - beaucoup à beaucoup avec la table supplémentaire - Ne peut pas insérer la valeur NULL Exception pendant la suppression
exception $ { "ne pouvait pas supprimer la collection: [A.AB # 20] [SQL: UPDATE AB SET aid = null aid = OU @ p0]" } NHibernate.Exceptions.GenericADOException
Impossible d'insérer la valeur NULL dans la colonne 'AId', table 'AB'; La colonne n'autorise pas les valeurs NULL. UPDATE échoue. La déclaration a été résiliée.
Mes classes:
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; }
}
Mes applications:
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();
}
}
code:
_session.BeginTransaction();
var a = _session.Get<A>(1);
foreach (var ab in a.AB) {
_session.Delete(ab);
}
_session.Delete(a);
transaction.Commit();
Je veux supprimer l'enregistrement dans Une table et tous les enregistrements associés dans AB tableau.
La solution la plus simple est de faire AId et Bid dans AB Table annulable mais je pense qu'il ya une meilleure solution et il peut être résolu dans les correspondances.
Merci d'avance :)
Le même problème :( – gabrieln