流利的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 Influences { get; set; } }
我试图使用Fluent nHibernate映射它们,因此。
public class TraitMap : ClassMap { public TraitMap() { Id(x => x.Id); Map(x => x.Name); Table("Traits"); } } public class SheetMap : ClassMap { public SheetMap() { Id(x => x.Id); HasManyToMany(x => x.Influences) .Schema("Sheets") .Table("Influences") .ParentKeyColumn("Trait") .ChildKeyColumn("Sheet") .AsMap("Rating") .Cascade.All(); Table("Sheets"); } }
这不起作用。 我得到了例外。
Trait.Id出现例外情况
现在,如果我将Dictionary更改为这样..
public class Sheet { public virtual int Id { get; set; } public virtual IDictionary Influences { get; set; } }
基本上将int设为Key,将Trait设为值(不是我想要的),它确实有效。 任何人都可以解释这一点,以及我如何更恰当地重现我想要做的事情?
我认为推理是因为当我指定
HasManyToMany
时,我指定了集合的Value元素。 然而,这不是我的意图。
我希望通过键的名称来查找,而不是值的名称。 虽然我意识到这在技术上是一个“可接受的”解决方案,但它有点违反了Dictionary惯例。 如果可能的话,我宁愿采取更多的解决方案 – 而且我希望更好地了解实际情况。
你想要的是hbm中的
映射会给你什么。 我相信你不需要AsEntityMap
,而是想要AsEntityMap
。 但是, 看看这个线程 ,它讨论了地图的流畅映射的重写(在8月),使得上述所有内容都过时了。
编辑 :对于AsEntityMap
和其他选项,请看看这个问题 和答案
HasMany(x => x.Influences) .KeyColumn("key column name") .AsEntityMap("referenced column name") .Entity("dict value", v=> v.Type());
另外,你说你使用的是最新版本 – 最新版本是1.1,但是trunk是2.0,并且非常不同,而且还有很多。 如果你不是2.0+,你就不会看到大多数帮助线程中发布的方法,如上面链接的那些。