0

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.

schéma Ma base de données: enter image description here

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 :)

Répondre

0

Essayez ceci:

HasMany(x => x.AB) 
    .KeyColumn("BId") 
    .Cascade.All() 
    .Inverse(); 
+0

Le même problème :( – gabrieln