2012-03-26 110 views
2

如何使用映射,通過代碼映射我這些實體:由代碼NHibernate映射:如何映射IDictionary?

public class Foo 
{ 
    public virtual IDictionary<Bar, string> Bars { get; set; } 
} 

public class Bar 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

我發現this thread,但它並沒有映射實體,只有簡單的類型。我試過很多映射,包括自動映射:

Map(x => x.Bars, 
    m => 
    { 
     m.Key(k => k.NotNullable(true)); 
     m.Cascade(Cascade.All); 
    }, 

但大多拋出這兩個錯誤:

  1. 外鍵(條[IDX))必須有相同數量的被引用的主鍵列(酒吧[FooId,idx])。
  2. 來自表FoosToStrings的關聯引用了一個未映射的類:System.String。

任何幫助將不勝感激。謝謝。 :)

+0

這意味着該指數多到任何我認爲有FluentNHibernate一些問題的映射。請使用解決方法查看相關問題。 http://stackoverflow.com/questions/8542298/fluent-nhibernate-index-many-to-many。 – 2012-03-28 00:25:55

+0

我沒有使用Fluent。我正在使用代碼映射。 – Yogesh 2012-03-28 02:37:43

+0

道歉。需要更仔細地閱讀這個問題。 – 2012-03-28 03:34:10

回答

0

我認爲這應該工作

Map(x => x.Bars, 
    entryMap => entryMap.Key(k => k.Column("foo_id")), 
    keymap => keymap.ManyToMany(m => m.Column("bar_Id")), 
    elementMap => elementMap.Element(m => m.Column("value")));