我在一个可能为空的实体上有一个组件。这适用于 InMemory 数据库的单元测试,但不适用于基于文件的 SQLite 数据库。我使用布尔标志来指示组件是否已设置,但这似乎是一个 hack。
这是 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();
}
}
对于内存数据库,当实体的所有列都为空时,实体上的组件为空。这是我所期望的。使用基于文件的数据库时,组件为空。所以我不能entity.Component==null
用来检查组件是否已经设置。