2012-05-08 14 views
1

私は通常このようなデータを扱いませんが、IDはそれを試してみると思いました。それが判明したので、私は失敗した:/ /どのように進むかわからない。流暢Nhibernate:HasManyプロパティとしてアイテムを削除しないでください

私は、データベース・オブジェクトのトラックがあります。マッピングファイルで

public virtual string Type { get; set; } 

public virtual IList<DateTypeTrack> TrackDates { get; set; } 

を:

Table("Tracks"); 
Map(x => x.Type).Not.Nullable(); 
HasMany(x => x.TrackDates).KeyColumn("TrackID").Cascade.All(); 

DateTypeTrackオブジェクトは、次のようになります。このようなマッピングファイルで

public virtual DateType DateType { get; set; } 
public virtual Track Track { get; set; } 
public virtual int Days { get; set; } 

Table("DateTypeTracks"); 
References(x => x.DateType, "DateTypeID").Not.Nullable(); 
References(x => x.Track, "TrackID").Not.Nullable(); 
Map(x => x.Days).Not.Nullable(); 

もし必要ならば、私はそのDateTypeコードも投稿しますが、私はその必要はないと思います。

そして非常に単純です、私のサービス層でdeleteメソッドを記述しようとしています:

public void PushDelete(int id) 
    { 
     Track track = _tracks.Get(id); 

     try 
     { 
      _tracks.BeginTransaction(); 
      _tracks.Delete(track); 
      _tracks.CommitTransaction(); 
     } 
     catch (Exception) 
     { 
      _tracks.RollbackTransaction(); 
      throw; 
     } 
    } 

私はエラーを取得しておいてください。

could not delete collection: [TSE.Domain.DatabaseObjects.Track.TrackDates#12][SQL: UPDATE DateTypeTracks SET TrackID = null WHERE TrackID = @p0] 

私はそのがやろうと理由を知りません最終的に更新しますが、それが問題の原因となっていると思います。どんな償還方法がありますか?

ありがとうございました。 DateTypeTrackはすでに2つのエンティティ間の関連の世話をするので

答えて

3

あなたは私が項目を削除する必要があり、hasManyのは、だから(更新)

HasMany(x => x.TrackDates).KeyColumn("TrackID").Cascade.All().Inverse(); 
+0

を維持しないことをNHを伝えるためにInverseとしてhasManyのマークを付ける必要があります私は主なオブジェクトを削除する前に? –

+0

いいえ、カスケードallはアイテムにdeleteコマンドをカスケードします。手動で行う必要はありません – Firo

+0

クール。完璧に働いた。 –

関連する問題