首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate 3.2: SchemaExport不使用SQLite

NHibernate 3.2: SchemaExport不使用SQLite
EN

Stack Overflow用户
提问于 2012-03-25 01:43:11
回答 1查看 1.3K关注 0票数 2

我使用内存中的db进行一些快速的单元测试,使用以下代码:

代码语言:javascript
复制
public class MemoryDb
{
    private static Configuration configuration;
    private static ISessionFactory sessionFactory;

    static MemoryDb()
    {
        configuration = new NHibernate.Cfg.Configuration();

        configuration.DataBaseIntegration(x =>
        {
            x.Driver<SQLite20Driver>();
            x.Dialect<SQLiteDialect>();
            x.ConnectionProvider<DriverConnectionProvider>();
            x.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
            x.IsolationLevel = IsolationLevel.ReadCommitted;
            x.ConnectionString = "Data Source=:memory:;";
            x.Timeout = 255;
            x.BatchSize = 100;
            x.LogFormattedSql = true;
            x.LogSqlInConsole = true;
            x.AutoCommentSql = false;
        });

        configuration.AddMapping(DbHelper.GetAutoMappings());
        sessionFactory = configuration.BuildSessionFactory();
    }

    public static ISession GetSession()
    {
        var session = sessionFactory.OpenSession();
        new SchemaExport(configuration).Execute(true, true, false, session.Connection, null);
        return session;
    }
}

问题是模式导出似乎不起作用。我的一个测试是这样的:

代码语言:javascript
复制
[Fact]
public void ShouldFindDuplicateByEmail()
{
    using (var session = MemoryDb.GetSession())
    {
        var repo = new NHibernateCustomerRepository(session);
        var customer = new Customer();
        customer.EmailAddress = "test@test.com";
        repo.Save(customer);

        var duplicates = repo.FindDuplicates(customer);
        Assert.Equal(1, duplicates.Length);
    }
}

测试失败,并显示错误no such table: Customers。这一切都适用于Fluent NHibernate和NHibernate 3.1。我知道这不是映射本身的问题,因为当我在现有的SQL Server数据库上运行应用程序时,实际的应用程序可以正常工作。只有在运行测试时才会失败。有什么想法吗?

编辑:如果我只更改连接字符串,使其写入一个文件(即x.ConnectionString = "data source=" + Path.GetTempFileName(); ),则整个操作都可以正常工作。我猜要么是模式没有在内存中的db上正确运行,要么是每次我执行会话命令时它都会得到一个新的内存中的db,但是不知道如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-25 02:29:09

我在这里找到了答案:https://forum.hibernate.org/viewtopic.php?p=2397541#p2397541

我必须将以下内容添加到数据库配置中:

代码语言:javascript
复制
x.ConnectionReleaseMode = ConnectionReleaseMode.OnClose;

否则,NHibernate会在刷新每个语句后释放连接,从而消除具有该模式的内存中数据库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9853969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档