2011-04-18 61 views
0

我有兩個實體瑣碎的映射:投票和POLLOPTIONNHibernate和的hasMany映射

投票:

public class PollMap : ClassMap<Poll> 
{ 
    public PollMap() { 
     Id(x => x.Id); 

     Map(x => x.Content); 

     HasMany(x => x.PollOptions).Cascade.All(); 
    } 
} 

POLLOPTION:

public class PollOptionMap : ClassMap<PollOption> 
{ 
    public PollOptionMap() { 
     Id(x => x.Id); 

     Map(x => x.Content); 

     References(x => x.Poll); 
    } 
} 

在測試代碼我嘗試刪除投票實體的第一個投票選項

測試代碼:

[Transaction] 
    public ActionResult Add() { 

     var poll = new Poll() { 
      Content = "poll", 
      PollOptions = new List<PollOption>() { 
       new PollOption(){ 
        Content="PollOption#1" 
       }, 
       new PollOption(){ 
        Content="PollOption#2" 
       } 
      } 
     }; 

     GetSession.Save(poll); 

     return Content("Added"); 
    } 

    [Transaction] 
    public ActionResult Removed() { 

     var poll = GetSession.Query<Poll>().FirstOrDefault(); 

     poll.PollOptions.RemoveAt(0); 

     GetSession.Update(poll); 

     return Content("Updated"); 
    } 

當刪除動作射擊它不是從數據庫中,而不是在我的外鍵:(

polloption table

PS設置空刪除POLLOPTION。谷歌沒有幫助

回答

1

Cascade.All()只刪除父對象被刪除的子對象。如果您希望孩子在被收藏時被刪除,您需要Cascade.AllDeleteOrphan()

附加說明:您還必須將雙向關聯的一側標記爲Inverse()。關於這方面的更多信息:http://nhibernate.info/doc/nh/en/index.html#collections-bidirectional

+0

沒有即時通訊:擁有cascade =「all-delete-orphan」的集合不再被擁有實體實例引用 – Sasha 2011-04-18 12:00:45

+0

@msony在哪條線上得到此錯誤? – 2011-04-19 21:12:36

+0

看起來像孩子以某種方式連接到父母不只與密鑰 – Sasha 2011-04-20 06:58:22