0

私は追加テーブルと多対多の関係を持っています。オブジェクトも参照を持っていますエラー以下ABテーブルに発生します。流暢なNHibernate - 追加のテーブルで何度も何度も - 値NULLを挿入できません。削除時に例外が発生します。

$例外を{ "コレクションを削除できませんでした:[A.AB#20] [SQL:P0 @ AIDは= UPDATE AB SET AID = ヌル]" } NHibernate.Exceptions.GenericADOException

カラム 'AId'に値NULLを挿入できません。 テーブル 'AB';列 はNULLを許可しません。 UPDATEに失敗します。ステートメントは終了されました。

私のデータベーススキーマ: enter image description here

私のクラス:

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表にNULL可能援助入札を作ることですが、私はそこよりよい解決策があり、それがマッピングで解決することができると思います。

は、事前にありがとう:)

答えて

0

このお試しください:

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

同じ問題を:( – gabrieln

関連する問題