Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 流利的Nhibernate&;SQLite映射组件_C#_.net_Nhibernate_Sqlite_Fluent Nhibernate Mapping - Fatal编程技术网

C# 流利的Nhibernate&;SQLite映射组件

C# 流利的Nhibernate&;SQLite映射组件,c#,.net,nhibernate,sqlite,fluent-nhibernate-mapping,C#,.net,Nhibernate,Sqlite,Fluent Nhibernate Mapping,我在一个实体上有一个可能为空的组件。这在InMemory数据库的单元测试中起作用,但在基于文件的SQLite数据库中不起作用。 我使用一个布尔标志来指示是否设置了组件,但这似乎是一个黑客行为 这是NHibernate还是SQLite错误?还是我遗漏了什么 以下是我的业务价值映射: public sealed class EntityMap : ClassMap<Entity> { public EntityMap() { Not.LazyLoad();

我在一个实体上有一个可能为空的组件。这在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();

   }
}
公共密封类EntityMap:ClassMap
{
公共实体映射()
{
不是。懒汉();
Id(m=>m.Uid);
Map(m=>m.HasComponent).Not.Nullable();
组件(m=>m.Component);
}
}
公共密封类MyComponentMap:ComponentMap
{
公共MyComponentMap()
{
Map(c=>c.SomeBasicProperty).Nullable();
HasMany(c=>c.ListOfValues).AsList(li=>li.Column(“Number”))
.组件(部分=>
{
part.Map(s=>s.Name);
零件图(s=>s.Value);
}
.表格(“组件值”)
.Cascade.alldelete孤儿().Not.LazyLoad();
}
}
对于内存数据库,当实体的所有列都为null时,实体上的组件为null。这是我所期望的。
使用基于文件的数据库时,组件为空。因此,我无法使用
实体。组件==null
检查组件是否已设置。

我使用inmemory测试了您的代码,它按预期返回inmemory数据库的
组件!=null
。在NHibernate中,集合从不为空,但可以为空,并且组件只有当所有属性都为null时,ntt才为null,因此组件永远不应该为null

using (var tx = session.BeginTransaction())
{
    id = session.Save(new Entity());
    tx.Commit();
}

var entity = session.Get<Entity>(id);
Console.WriteLine(entity.Component == null);
使用(var tx=session.BeginTransaction())
{
id=session.Save(新实体());
tx.Commit();
}
var entity=session.Get(id);
Console.WriteLine(entity.Component==null);
Get返回组件设置为null的同一实例

using (var tx = session.BeginTransaction())
{
    id = session.Save(new Entity());
    tx.Commit();
}

session.Clear();

var entity = session.Get<Entity>(id);
Console.WriteLine(entity.Component == null);
使用(var tx=session.BeginTransaction())
{
id=session.Save(新实体());
tx.Commit();
}
session.Clear();
var entity=session.Get(id);
Console.WriteLine(entity.Component==null);

Get返回已加载的实例,该实例的组件设置为非null。

您是否可以发布单元测试以查看您期望的内容和得到的内容。我会处理它。问题是单元测试可以工作,但只有在使用sqlite的内存数据库时才可以。当它工作时,结果是什么:组件为null,而不是null?如果它不工作会发生什么:the component为null,非null,异常?编辑了我的问题以更好地描述问题。考虑到集合是原因,但没有意识到我的测试可能会出错!如果集合为空,我仍然希望正确的null处理…不容易实现,因为NH假设集合可能是懒散加载的(其中大小在初始化之前未知)并默认为此设计。如果组件及其集合为空,请使用属性getter返回null,或者使用hack/bend NH执行所需操作