我正在尝试使用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'
应该有办法做到这一点。有谁知道我做错了什么?
答案 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
。我怀疑这是你想要多对多关系的行为。