我有以下(简化的)实体需要批量插入:
public class BookmarkEntity
{
public virtual Guid Id { get; set; }
public virtual ISet<string> Tags { get; set; }
}
并且Tags
配置了属性(通过 FluentNHibernate):
public class BookmarkEntityMappingOverride : IAutoMappingOverride<BookmarkEntity>
{
public void Override(AutoMapping<BookmarkEntity> mapping)
{
mapping.HasMany(x => x.Tags)
.AsSet().Element("Value")
.Cascade.Delete()
.Not.LazyLoad();
}
}
这会产生这些表(使用 SQLite):
CREATE TABLE "BookmarkEntity" (
Id UNIQUEIDENTIFIER not null,
primary key (Id)
)
CREATE TABLE Tags (
BookmarkEntity_id UNIQUEIDENTIFIER not null,
Value TEXT,
constraint FK9061CD2928F7F2F9 foreign key (BookmarkEntity_id) references "BookmarkEntity"
)
我想使用无状态会话来减少内存消耗并提高一点速度。我意识到,因为无状态会话不执行任何级联,我必须Tags
自己插入集合。我尝试了以下方法:
void InsertIntoStatelessSession(BookmarkEntity entity, IStatelessSession statelessSession)
{
statelessSession.Insert(entity);
if (entity.Tags != null)
{
foreach (string tag in entity.Tags)
statelessSession.Insert("Tags", tag);
}
}
但这失败了,但有一个例外:
NHibernate.MappingException:没有持久性:标签
那么,如何插入书签实体及其标签集?