流利的NHibnernate HasManyToMany与索引

时间:2009-03-14 15:59:11

标签: fluent-nhibernate

我正在尝试使用Fluent NHibnernate映射多对多集合。我的模型类有这个属性:

public virtual IList<Resource> Screenshots
{
    get { return _screenshots; }
    protected set { _screenshots = value; }
}

我的流利映射是:

HasManyToMany(x => x.Screenshots)
                .AsList(x => x.WithColumn("Index"))
                .Cascade.AllDeleteOrphan();

当我运行我的应用程序时,我收到以下异常消息:

  

命名空间中的元素“列表”   'urn:nhibernate-mapping-2.2'有   无效的子元素'多对多'   在命名空间   '瓮:NHibernate的映射-2.2'。清单   可能的元素:'索引,   命名空间中的list-index'   '瓮:NHibernate的映射-2.2'

应该有办法做到这一点。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

当前的FluentNHibernate语法如下:

HasManyToMany(x => x.Screenshots)
    .AsList(i => i.Column("`Index`"));

索引列默认为Index,但这是SQL Server上的保留字(也可能是其他数据库),因此您必须使用反向标记引用它。

另外,我建议不要在这种关系上设置级联。请考虑以下代码:

x.Screenshots.Remove(s);
session.SaveOrUpdate(x);

即使没有指定级联,NHibernate也会正确删除链接表中的行。但是,如果指定AllDeleteOrphan,则NHibernate将从链接表中删除该行,并删除资源s。我怀疑这是你想要多对多关系的行为。