3
我有一个类包含一个使用Fluent Nhibernate映射到多对多数据库关系的集合。映射是如下 -Nhibernate中的多对多集合的更新导致连接表中的多个删除
Table("Book");
Id(x => x.Id);
Map(x => x.Title);
Map(x => x.NumberOfPages);
HasManyToMany(x => x.Authors)
.Cascade.AllDeleteOrphan()
.Table("BookAuthor")
.ParentKeyColumn("BookId")
.ChildKeyColumn("AuthorId");
然后我得到这个类的一个实例,并使用下面的代码添加一个项目的作者收集 -
var book = session.CreateCriteria(typeof(Book)).UniqueResult<Book>();
Author author = new Author {Name="Phil Moran",Age=51};
book.Authors.Add(author);
session.SaveOrUpdate(book);
该数据库已成功更新,但NHibernate的更新BookAuthor表首先删除链接到更新图书的所有记录,然后重新填充所有数据以及新作者所需的额外记录。为什么Nhibernate这样做?我希望它只是将包含书和作者详细信息的单个记录添加到多对多表(BookAuthor)中,而不执行任何删除操作。我可以通过映射来改变这种行为吗?
感谢迭戈,我将我的收藏定义为一个IList,我认为默认情况下将收藏集映射为一个包。我将我的收藏定义更改为 - 私人ISet _authors = new HashedSet (); 公共虚拟ISet 作者.... 和一切按预期工作。 –
ipr101
2010-07-28 06:08:58