使用下面的類..功能NHibernate,IDictionary的混亂
public class Trait
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Sheet
{
public virtual int Id { get; set; }
public virtual IDictionary<Trait, int> Influences { get; set; }
}
我試圖把它們映射使用功能NHibernate,因爲這樣的。
public class TraitMap : ClassMap<Trait>
{
public TraitMap()
{
Id(x => x.Id);
Map(x => x.Name);
Table("Traits");
}
}
public class SheetMap : ClassMap<Sheet>
{
public SheetMap()
{
Id(x => x.Id);
HasManyToMany<Trait>(x => x.Influences)
.Schema("Sheets")
.Table("Influences")
.ParentKeyColumn("Trait")
.ChildKeyColumn("Sheet")
.AsMap<int>("Rating")
.Cascade.All();
Table("Sheets");
}
}
這是行不通的。我明白了。
異常發生吸氣Trait.Id的現在
,如果我改變了字典了,看起來像這樣..
public class Sheet
{
public virtual int Id { get; set; }
public virtual IDictionary<int, Trait> Influences { get; set; }
}
基本上使得INT的關鍵,而特質價值(不是我想要的),它確實有效。任何人都可以解釋這一點,以及我如何能夠更恰當地重現我正在嘗試做的事情?
我認爲這是因爲當我指定
HasManyToMany<Trait>
時,我指定了集合的Value元素。但是,這不是我的意圖。
我想通過密鑰的名稱而不是價值的名稱來查找。雖然我認識到這在技術上是一種「可接受」的解決方案,但它違背了字典慣例。如果可能的話,我寧願採取更多的解決方案,而且我希望更好地理解實際情況。
我已經閱讀過這個帖子,不幸的是它對我沒什麼意義。我甚至在發佈這個問題之前就發現了它。此外,我有流利的nhibernate的最新版本,我沒有找到HasMany()的.Index方法。 – Ciel 2010-10-13 15:36:38
我可以打擾你舉例說明如何使用AsEntityMap來解決這個問題嗎?我仍然很困惑。 – Ciel 2010-10-13 15:42:07
@Stacey添加了一些編輯,希望幫助1.1和2.0如此不同以至於很難找到幫助(專家在2.0,但發佈的版本是1.1) - 並且很難刪除。 – 2010-10-13 15:54:14