内存中的SqLite数据库和NHibernate

内存中的SqLite数据库和NHibernate,nhibernate,sqlite,Nhibernate,Sqlite,我让nhibernate处理oracle数据库,我正在尝试使用sqlite内存数据库来测试我们的查询逻辑。我相信我已经阅读、理解并确认了网络上关于这个问题的每一个答案,其中一些答案已经过几次:) 我得到的SQLite错误没有这样的表: 我在SchemaExport调用中也没有看到任何ddl命令 这里是我的设置,我觉得是相关的位。 这段代码都来自同一个方法 cfg = new Configuration() .SetProperty(Environment.ReleaseConnections,

我让nhibernate处理oracle数据库,我正在尝试使用sqlite内存数据库来测试我们的查询逻辑。我相信我已经阅读、理解并确认了网络上关于这个问题的每一个答案,其中一些答案已经过几次:)

我得到的SQLite错误没有这样的表: 我在SchemaExport调用中也没有看到任何ddl命令

这里是我的设置,我觉得是相关的位。 这段代码都来自同一个方法

cfg = new Configuration()
.SetProperty(Environment.ReleaseConnections, "on_close")
.SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName)
.SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName)
.SetProperty(Environment.ConnectionString, "Data Source=:memory:;Version=3;New=True")
.SetProperty(Environment.ProxyFactoryFactoryClass, typeof(ProxyFactoryFactory).AssemblyQualifiedName)
.SetProperty(Environment.ShowSql, "true")
.SetProperty(Environment.ConnectionProvider, typeof(NHibernate.Connection.DriverConnectionProvider).AssemblyQualifiedName);
cfg.AddAssembly("MyAssembly");
_sessionFactory = cfg.BuildSessionFactory();
_session = _sessionFactory.OpenSession();
new SchemaExport(cfg).Execute(true, true, false, _session.Connection, Console.Out); <--don't see any ddl commands here
var q = from c in _session.Query<ComponentGroup>()
where !c.IsDiscontinued
select c;
var z = q.ToList(); //<--get error here
内部异常

  InnerException: System.Data.SQLite.SQLiteException
   Message=SQLite error
   no such table: TBL_COMPONENT_GROUP
   Source=System.Data.SQLite
   ErrorCode=-2147467259
   StackTrace:
        at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
        at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
        at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
        at System.Data.SQLite.SQLiteDataReader.NextResult()
        at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
        at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
        at System.Data.SQLite.SQLiteCommand.ExecuteDbDataReader(CommandBehavior behavior)
        at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
        at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
        at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session)
        at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
        at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
        at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
我使用的是NHibernate版本3.1.0.4,System.Date.SQLite版本2.0.50727,因此修复程序将替换 newschemaexport(cfg).Execute(true,true,false,_session.Connection,Console.Out); 具有 newschemaexport(cfg).Execute(true,true,false,_session.Connection,null)

我真的不知道为什么,但我添加了代码,将行插入到导出的表中,正如预期的那样


然后我将控制台.Out parm放回,得到一个“无法写入已关闭的TextWriter”错误。

您能检查一下您的hbm.xml映射是否真的设置为embedded resource吗?事实上,同一个hbm可用于oracle会话
public class ComponentGroup
{
    public virtual int Id { get; set; }
    public virtual int AssemblyFacilityId { get; set; }
    public virtual string Name { get; set; }
    public virtual bool IsDiscontinued { get; set; }
}
  InnerException: System.Data.SQLite.SQLiteException
   Message=SQLite error
   no such table: TBL_COMPONENT_GROUP
   Source=System.Data.SQLite
   ErrorCode=-2147467259
   StackTrace:
        at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
        at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
        at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
        at System.Data.SQLite.SQLiteDataReader.NextResult()
        at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
        at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
        at System.Data.SQLite.SQLiteCommand.ExecuteDbDataReader(CommandBehavior behavior)
        at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
        at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
        at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session)
        at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
        at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
        at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)