Fleunt NHibernate不在nunit测试夹具之外工作

时间:2010-03-23 02:45:03

标签: c# nhibernate fluent-nhibernate

好的,这是我的问题......

我使用RTM Fluent Nhibernate创建了一个数据层。我的创建会话代码如下所示:

_session = Fluently.Configure().
Database(SQLiteConfiguration.Standard.UsingFile("Data.s3db"))                   
                        .Mappings( m =>
                        {
                         m.FluentMappings.AddFromAssemblyOf<ProductMap>();
                         m.FluentMappings.AddFromAssemblyOf<ProductLogMap>();
                        })
                        .ExposeConfiguration(BuildSchema)
                        .BuildSessionFactory();

当我在测试项目中引用模块时,然后创建一个看起来像这样的测试夹具:

    [Test]
    public void CanAddProduct()
    {
        var product = new Product {Code = "9", Name = "Test 9"};
        IProductRepository repository = new ProductRepository();

        repository.AddProduct(product);

        using (ISession session = OrmHelper.OpenSession())
        {
            var fromDb = session.Get<Product>(product.Id);

            Assert.IsNotNull(fromDb);
            Assert.AreNotSame(fromDb, product);
            Assert.AreEqual(fromDb.Id, product.Id);
        }

我的测试通过。当我打开创建的SQLite DB时,包含Code 9的新产品就在其中。 Product和ProductLog的表格都在那里。

现在,当我创建一个新的控制台应用程序并引用相同的库时,请执行以下操作:

        Product product = new Product() {Code = "10", Name = "Hello"};
        IProductRepository repository = new ProductRepository();
        repository.AddProduct(product);

        Console.WriteLine(product.Id);

        Console.ReadLine();

它不起作用。我实际上得到了非常讨厌的异常链。为了节省大量的头痛,这里是摘要:

顶级例外:

创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合和InnerException以获取更多详细信息。\ r \ n \ r \ n

PotentialReasons集合为空

内部异常:

找不到程序集System.Data.SQLite中的IDbCommand和IDbConnection实现。确保程序集System.Data.SQLite位于应用程序目录或全局程序集缓存中。如果程序集位于GAC中,请使用应用程序配置文件中的元素指定程序集的全名。

单元测试库和控制台应用程序都引用完全相同的System.Data.SQLite版本。两个项目在调试文件夹中都具有完全相同的DLL。我甚至尝试将创建的单元测试库中的SQLite DB复制到控制台应用程序的调试目录中,并删除了构建架构线,但它仍然失败

如果有人能帮我弄清楚为什么这不能在我的单元测试之外工作,我们将不胜感激。这个疯狂的错误让我站了起来。

1 个答案:

答案 0 :(得分:2)

如果您使用的是64x操作系统,请尝试将编译器构建选项设置为x86。