2011-04-18 60 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