好的,这是我的问题......
我使用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复制到控制台应用程序的调试目录中,并删除了构建架构线,但它仍然失败
如果有人能帮我弄清楚为什么这不能在我的单元测试之外工作,我们将不胜感激。这个疯狂的错误让我站了起来。
答案 0 :(得分:2)
如果您使用的是64x操作系统,请尝试将编译器构建选项设置为x86。