2012-03-05 44 views
1

NHibernate的3.2映射一对多映射我想学习NHibernate 3.2 built-in mapping by code api不流利的NHibernate)。你能帮我绘制这些实体之间的一对多关系吗?一个被程序代码

public class Member { 
    public virtual int Id { get; set; } 
    public virtual ICollection<Comment> Comments { get; set; } 
} 

public class Comment { 
    public virtual int Id { get; set; } 
    public virtual Member { get; set; } 
} 

UPDATE:

我映射Id这样的:

Id(
    t => t.Id, 
    t => { 
     t.Generator(Generators.HighLow, g => g.Params(new { max_low = 100 })); 
     t.Column(typeof(TEntity).Name + "Id"); 
    }); 
+1

发布你想要可以帮助我们理解你的问题多一点的XML。 – Rippo 2012-03-05 08:44:45

回答

7

这并不像听起来那么我们现在不主键的策略,如果你容易使用袋子的或设置,你用什么级联等......然而说,下面是一个小样本,应该让你开始...

了成员M apping: -

//note: bag could be Set 
public class MemberMapping : ClassMapping<Member> { 
    public MemberMapping() { 
    Id(x => x.Id, x => { x.Generator(...); etc... }); 
    Bag(x => x.CmsRegionContentList, bag => { 
      bag.Inverse(true); // Is collection inverse? 
      bag.Cascade(Cascade.DeleteOrphans); //set cascade strategy 
      bag.Key(k => k.Column(col => col.Name("MemberId"))); //foreign key in Comment table 
    }, a => a.OneToMany()); 
    } 
} 

而对于评论的映射: -

public class CommentMapping : ClassMapping<Comment> { 
    public CommentMapping() { 
     Id(x => x.Id, x => { x.Generator(...); etc... }); 
     ManyToOne(x => x.Page, x => { 
      x.Column("MemberId"); 
      x.Update(false); //either True or False 
      x.Insert(false); 
      x.Fetch(FetchKind.Join); //fetch join or select 
     }); 
     } 
    } 

编辑我还要指出的是,你真的需要学习XML映射的基础知识,看看什么样的Update每个属性并Insert实际上做到您的模型持续的方式。

+0

谢谢。我只是新来的NH,我不知道xml或Fluent。我更新Q并在那里添加主键策略。在先进的感谢 – 2012-03-05 08:55:42

+0

小心使用更新,插入,以及对多对一部分提取的命令 - 这将覆盖,或者至少兽皮,默认的行为,并可能导致意想不到的结果。如果您稍后实施了一项公约,情况会变得更糟。 – Fourth 2012-03-05 16:15:43

+0

是的,应该指出的是,这是一个如何将事物放在一起的例子,它可能不是您想要的默认值。 – Rippo 2012-03-05 16:22:17