我有一个类,其中包含一个使用 Fluent 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 表,方法是首先删除其中链接到更新书籍的所有记录,然后重新填充所有数据以及新作者所需的额外记录。为什么 Nibernate 会这样做?我希望它只是将包含书籍和作者详细信息的单个记录添加到多对多表(BookAuthor)中,而不执行任何删除操作。我可以通过我的映射更改此行为吗?
当集合被映射为bag
(我猜这是 FluentNH 中的默认设置)。
Use a set
, list
or idbag
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)