使用SQLite In Memory配置测试NHibernate时,如何创建另一个数据
发布时间:2020-12-12 19:00:24 所属栏目:百科 来源:网络整理
导读:我们有一个使用NHibernate / FluentNHibernate和一个指向我们的SQL环境的MsSqlConfiguration.MsSql2008.ConnectionString的应用程序. SQL服务器有几个数据库,我们可以使用如下的约定连接到不同的数据库: public class FactseDatabaseConvention : IClassCon
我们有一个使用NHibernate / FluentNHibernate和一个指向我们的SQL环境的MsSqlConfiguration.MsSql2008.ConnectionString的应用程序. SQL服务器有几个数据库,我们可以使用如下的约定连接到不同的数据库:
public class FactseDatabaseConvention : IClassConvention { public void Apply(IClassInstance instance) { if (instance.EntityType.Namespace.EndsWith("Model.OtherEntities")) { instance.Schema("OtherDatabase.dbo"); } } } 这样可以生成正确的查询以访问OtherDatabase.当我们想要使用带有SessionFactory的SQLiteConfiguration.Standard.InMemory()进行测试时,会出现问题. SQLite准备时,Persistence测试失败: System.Data.SQLite.SQLiteException : SQL logic error or missing database unknown database OtherDatabase 这是它生成的命令: create table OtherDatabse.dbo_my_other_entity_table ( Id UNIQUEIDENTIFIER not null,... other properties ) 有没有办法可以更改我的SQLiteConfiguration,让它创建2个内存数据库,如果是这样,怎么样?或者我应该创建一个单独的会话来测试这些其他实体? 解决方法我遇到了同样的问题 – (自从我们从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,一个类似的) – 在Web应用程序中,您告诉您的IoC容器使用sql server one,并在测试应用程序中使用Sqlite.然后在你的会议中: public void Apply(IClassInstance instance) { var helper = IoC.get<IMappingsHelper>(); if (instance.EntityType.Namespace.EndsWith("Model.OtherEntities") && helper.SchemasEnabled) { instance.Schema("OtherDatabase.dbo"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |