2012-05-08 99 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代碼,但我不認爲它是必需的。

,我試圖寫在我的服務層的刪除方法很簡單:

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] 

我不知道爲什麼它試圖做最後更新,但我想這是什麼原因造成的問題。我有什麼樣的追索權?

謝謝。

回答

3

因爲DateTypeTrack已經關心的兩個實體之間的關聯,你應該紀念的hasMany爲Inverse告訴NH的的hasMany不維護它(更新)

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

所以,我應該刪除的項目在刪除主對象之前? –

+0

不,級聯都會將刪除命令級聯到項目。不需要手動去做 – Firo

+0

很酷。完美工作。 –