5

私たちのSQL環境で指摘されているMsSqlConfiguration.MsSql2008.ConnectionStringのNHibernate/FluentNHibernateを使用するアプリケーションがあります。 SQLサーバは、複数のデータベースを持っていると我々はそうのような規則を使用して、異なるデータベースに接続することができます。これは動作し、正しいクエリがOtherDatabaseにアクセスするために生成されSQLite In Memoryの設定でNHibernateをテストするとき、別のデータベースをどのように作成しますか?

public class FactseDatabaseConvention : IClassConvention 
{ 
    public void Apply(IClassInstance instance) 
    { 
     if (instance.EntityType.Namespace.EndsWith("Model.OtherEntities")) 
     { 
      instance.Schema("OtherDatabase.dbo"); 
     } 
    } 
} 

。この問題は、SessionFactoryでSQLiteConfiguration.Standard.InMemory()を使用してテストしたいときに発生します。

System.Data.SQLite.SQLiteException : SQL logic error or missing database 
unknown database OtherDatabase 

をこれは、それが生成するコマンドです::SQLiteのは、準備されたときに持続性テストが失敗し

create table OtherDatabse.dbo_my_other_entity_table (
     Id UNIQUEIDENTIFIER not null, 
     ... other properties 
) 

私はそれが2、インメモリデータベースを作成してもらうために私SQLiteConfigurationを変更すると、することができます方法はありますもしそうなら、どうですか?あるいは、これらの他のエンティティをテストするためのセッションを別途作成する必要はありますか?

答えて

0

私はこの非常に同じ問題を抱えていました - テストのためにSqliteからSql Server LocalDBに移動して以来、これはもうありませんでした。

私はまだコードを持っていない、私たちがやったことはこのように、スキーマを使用するかどうかを設定するコンポーネントを提供しました:

public class SqlLiteMappingsHelper : IMappingsHelper 
    { 
     public string TextColumnTableSpecification 
     { 
      get 
      { 
       // see sqlite faqs re: all varchars are very large whatever you specify 
       // http://www.sqlite.org/faq.html#q9 
       return "nvarchar(10)"; 
      } 
     } 

     public bool SchemasEnabled 
     { 
      get { return false; } 
     } 
    } 

(およびSchemasEnabled = trueとSQL Server用の同様のものを) - ウェブであなたはIoCコンテナにSQL Serverを使用するよう指示し、テストアプリケーションではSqliteを使用します。あなたの大会では:

public void Apply(IClassInstance instance) 
{ 
    var helper = IoC.get<IMappingsHelper>(); 
    if (instance.EntityType.Namespace.EndsWith("Model.OtherEntities") && helper.SchemasEnabled) 
    { 
     instance.Schema("OtherDatabase.dbo"); 
    } 
} 
+0

ありがとう@ジェンソンボタンイベント、これは動作する可能性があります。私が試してみる前に、ローカルのSQLソリューションで共有できる情報はありますか?私はそれを試みることを好むかもしれません。 – shanabus

+2

開発者向けに作成されたMSSQL Express 2012のインメモリ版です。それについては、[MSDNのブログエントリ](http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx)とリンク[MSSQL Express 2012をダウンロード](http://msdn.microsoft.com/en-us/evalcenter/hh230763.aspx)を参照してください。 MSDNサブスクリプションをお持ちの場合は、それを入手することもできます。 MSDNサブスクライバダウンロードでLocalDBを検索するだけです。 –

関連する問題