2011-07-22 57 views
0

我有nhibernate使用oracle數據庫,我試圖在內存數據庫中使用sqlite來測試我們的查詢邏輯。我相信我已閱讀,理解並確認網絡上有關此問題的每個答案,其中一些是幾次:)SqLite在內存數據庫和NHibernate

我得到的SQLite錯誤沒有這樣的表: 我也沒有看到任何ddl命令在SchemaExport調用

下面是我覺得是相關的我的設置的位。 此代碼是全部來自相同的方法

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 

我的.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping assembly="myassmebly" namespace="myns" xmlns="urn:nhibernate-mapping-2.2"> 
<class name="ComponentGroup" table="TBL_COMPONENT_GROUP" lazy="true" > 
<id name="Id" column="N_COMPONENT_GROUP_ID" type="int"> 
    <generator class="native" /> 
</id> 
<property name="AssemblyFacilityId" column="N_ASSEMBLY_FACILITY_ID" type="int" not-null="true" /> 
<property name="Name" column="C_COMPONENT_GROUP_NAME" type="string" not-null="true" /> 
<property name="IsDiscontinued" column="N_DISCONTINUED_FLAG" type="bool" not-null="true" /> 
</class> 
</hibernate-mapping> 

我的POCO

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

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,Sy stem.Date.SQLite版本2.0.50727

+0

你可以檢查你的hbm.xml映射是否真的設置爲嵌入式資源? – Firo

+0

它是,同樣的hbm與oracle會話一起工作 – Wieknot

回答

1

因此修復程序是用新的SchemaExport(cfg).Execute(true,true,false,_session.Connection,Console.Out)替換 ; 與 新的SchemaExport(cfg).Execute(true,true,false,_session.Connection,null);

真的不知道爲什麼,但我添加了代碼插入到導出表,其中按預期工作的行。

然後我把Console.Out parm放回來,並得到一個「無法寫入封閉的TextWriter」。錯誤。

相關問題