2012-03-05 41 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

相關問題