nullの可能性があるエンティティにコンポーネントがあります。これは、InMemoryデータベースを使用した単体テストでは機能しますが、ファイルベースのSQLiteデータベースでは機能しません。コンポーネントが設定されているかどうかを示すためにブールフラグを使用していますが、これはハックのようです。
これはNHibernateまたはSQLiteのバグですか?または私は何かが欠けていますか?
これがビジネス価値を取り除いた私のマッピングです:
public sealed class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
Not.LazyLoad();
Id(m => m.Uid);
Map(m => m.HasComponent).Not.Nullable();
Component(m => m.Component).ColumnPrefix("Component");
}
}
public sealed class MyComponentMap : ComponentMap<MyComponent>
{
public MyComponentMap()
{
Map(c => c.SomeBasicProperty).Nullable();
HasMany(c => c.ListOfValues).AsList(li => li.Column("Number"))
.Component(part =>
{
part.Map(s => s.Name);
part.Map(s => s.Value);
}
.Table("ComponentValues")
.Cascade.AllDeleteOrphan().Not.LazyLoad();
}
}
メモリデータベースでは、エンティティのすべての列がnullの場合、エンティティのコンポーネントはnullになります。これは私が期待することです。ファイルベースのデータベースを使用する場合、コンポーネントは空です。したがってentity.Component==null
、コンポーネントがすでに設定されているかどうかを確認するために使用することはできません。