首页 文章

流利的NHibnernate HasManyToMany与索引

提问于
浏览
2

我正在尝试使用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'中的元素'list'在命名空间'urn:nhibernate-mapping-2.2'中具有无效的子元素'many-to-many' . 期望的可能元素列表:名称空间'urn:nhibernate-mapping-2.2'中的'index,list-index' .

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

1 回答

  • 3

    当前的FluentNHibernate语法如下:

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

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

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

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

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

相关问题