一括挿入する必要がある次の (簡略化された) エンティティがあります。
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 : 次の永続化機能がありません: タグ
では、ブックマーク エンティティとそのタグのセットを挿入するにはどうすればよいでしょうか。