【问题标题】:NHibernate mapping by code: How to map IDictionary?NHibernate 通过代码映射:如何映射 IDictionary?
【发布时间】:2012-04-09 23:04:03
【问题描述】:

如何使用按代码映射来映射这些实体:

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. 外键 (Bars [idx])) 的列数必须与引用的主键 (Bars [FooId, idx]) 的列数相同。
  2. FoosToStrings 表中的关联引用了一个未映射的类:System.String。

任何帮助将不胜感激。谢谢。 :)

【问题讨论】:

  • 这转化为 index-many-to-any 映射,我认为这在 FluentNHibernate 中存在一些问题。请使用解决方法查看此相关问题。 stackoverflow.com/questions/8542298/….
  • 我没有使用 Fluent。我正在使用代码映射。
  • 道歉。需要更仔细地阅读问题。
  • 无需道歉。发生。 :)

标签: nhibernate mapping-by-code


【解决方案1】:

我认为这应该可行

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")));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2011-01-29
    • 2011-01-12
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多