我正在使用 NHibernate 创建我的第一个应用程序。不幸的是,我遇到了一个我无法解决的问题:
我正在从包含 CRUD 方法和 NHibernateHelper 类的“DAL”项目访问数据库。
我编写了一个测试项目,并尝试将一个对象添加到 DB - 它运行良好。但是,当我尝试从应用程序的 ViewModel(它也在另一个项目中)调用相同的方法时,它会在下面的代码中的configuration.BuildSessionFactory()处引发错误:
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Address).Assembly);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
例外:
NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.OracleDataClientDriver.
System.Reflection.TargetInvocationException: {"Exception has been thrown by the target of an invocation."}
System.NullReferenceException: {"Object reference not set to an instance of an object."}
在我的测试项目中,我添加了对 Oracle.DataAccess.dll 的引用并创建了 App.config,因为没有它会引发相同的错误:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="Oracle.DataAccess"
fullName="Oracle.DataAccess,
Version=4.112.2.0,
Culture=neutral,
PublicKeyToken=89b483f429c47342" />
</assemblyBinding>
</runtime>
</configuration>
我在包含 ViewModel 的项目中做了同样的事情,我需要从数据库中获取数据,但它没有帮助。我还为该参考将 Copy Local 设置为 True,但无济于事。
这是我的 App.config:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="dialect">
NHibernate.Dialect.Oracle10gDialect
</property>
<property name="connection.driver_class">
NHibernate.Driver.OracleDataClientDriver
</property>
<property name="connection.connection_string">
User Id=****;
Password=****;
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=
(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=xe)));
Pooling=true;
Enlist=false;
Statement Cache Size=50;
Min Pool Size=10;
Incr Pool Size=5;
Decr Pool Size=2;
</property>
<property name="show_sql">
true
</property>
</session-factory>
</hibernate-configuration>
我正在使用 NHibernate v 3.3.1.4000、Oracle 11g xe 和 64 位 Windows 7(我无法选择在 32 位或 64 位上进行调试,只有一种选择:“Active (Any CPU)”)
我可以从测试项目中使用它但我不能从另一个项目中使用它的原因是什么?
先感谢您