2011-04-07 86 views
1

時出現的問題我有兩個類流利的NHibernate:刪除HasOne關係

public PartMap() 
{ 
    Id(x => x.ID).GeneratedBy.Guid(); 
    HasOne(x => x.Stock) 
      .Cascade.All(); 
} 

public Stock 
{ 
    Id(x => x.ID).GeneratedBy.Guid(); 
    References(x => x.Part); 
} 

部分只有一隻股票,那是我用HasOne的原因。 數據插入正常,我有一個零件,一個股票,他們保存好。 我的問題是試圖刪除我得到一個錯誤,股票foreing關鍵部分是違反

"ORA-02292: integrity constraint (PRINERGY.FK121AD9E59966BE23) violated " . 

我看到它會嘗試之前沒有刪除相關的股票以刪除部分時。 我該如何解決它?

回答

4

它看起來像是一對一的雙向關聯。如何在NH(和FNH)中映射此關聯有兩種方法:主鍵關聯和外鍵關聯。你的例子更接近於外鍵關聯。

外鍵關聯

public PartMap() 
{ 
    Id(x => x.Id).GeneratedBy.Guid(); 
    References(x => x.Stock).Unique().Cascade.All(); 
    Map(x => x.Name); 
} 

public StockMap() 
{ 
    Id(x => x.Id).GeneratedBy.Guid(); 
    HasOne(x => x.Part).Cascade.All().PropertyRef("Stock"); 
    Map(x => x.Name); 
} 

主鍵關聯

public PartMap() 
{ 
    Id(x => x.Id).GeneratedBy.Guid(); 
    HasOne(x => x.Stock).Cascade.All(); 
    Map(x => x.Name); 
} 

public StockMap() 
{ 
    Id(x => x.Id).GeneratedBy.Foreign("Part"); 
    HasOne(x => x.Part).Constrained(); 
    Map(x => x.Name); 
} 

欲瞭解更多詳情,請參見http://fabiomaulo.blogspot.com/2010/03/conform-mapping-one-to-one.html

+0

謝謝!它現在正在工作 – Hada 2011-04-10 08:23:51

+0

您使用了哪個版本?你可以請標記這個答案解決?:) – 2011-04-10 16:44:56