Tôi vừa thiết lập NHibernate lần đầu tiên. nền tảng và cấu hình của tôi cài đặt như sau:Cấu hình NHibernate 3.0 với ODP.NET
- Cơ sở dữ liệu: Oracle 11.1g
- ODP.NET Version: 4.112.1.2 (Đã cài đặt từ ODTWithODAC112012, mà là một phiên bản 1 ở trên cài đặt db Oracle của tôi)
- NHibernate Phiên bản 3.0
Tôi đã tạo một ứng dụng MVC thử nghiệm với một dự án thử nghiệm. Sau đó, để kiểm tra kết nối NHibernate, tôi sử dụng bộ ghép đo sau:
using IBCService.Models;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
namespace IBCService.Tests
{
[TestFixture]
public class GenerateSchema_Fixture
{
[Test]
public void Can_generate_schema()
{
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Product).Assembly);
new SchemaExport(cfg).Execute(false, true, false);
}
}
Các Nhibernate tập tin cấu hình:
<?xml version="1.0" encoding="utf-8"?>
<!-- This config use Oracle Data Provider (ODP.NET) -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
<property name="connection.connection_string">
User ID=TEST;Password=******;Data Source=//RAND
</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
</session-factory>
</hibernate-configuration>
Mở thử nghiệm, tôi nhận được ngoại lệ stack trace sau:
NHibernate.HibernateException was unhandled by user code
Message=Could not create the driver from NHibernate.Driver.OracleDataClientDriver.
Source=NHibernate
StackTrace:
at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 113
at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 64
at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProviderFactory.cs:line 50
at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolean export, Boolean justDrop) in d:\CSharp\NH\nhibernate\src\NHibernate\Tool\hbm2ddl\SchemaExport.cs:line 333
at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, Boolean export, Boolean justDrop) in d:\CSharp\NH\nhibernate\src\NHibernate\Tool\hbm2ddl\SchemaExport.cs:line 290
at IBCService.Tests.GenerateSchema_Fixture.Can_generate_schema() in D:\APPS\VS2010\IBanking\CustomerService\IBCService.Tests\GenerateSchema_Fixture.cs:line 21
InnerException: System.Reflection.TargetInvocationException
Message=Exception has been thrown by the target of an invocation.
Source=mscorlib
StackTrace:
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type) in d:\CSharp\NH\nhibernate\src\NHibernate\Bytecode\ActivatorObjectsFactory.cs:line 9
at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings) in d:\CSharp\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:line 107
InnerException: System.NullReferenceException
Message=Object reference not set to an instance of an object.
Source=NHibernate
StackTrace:
at NHibernate.Driver.OracleDataClientDriver..ctor() in d:\CSharp\NH\nhibernate\src\NHibernate\Driver\OracleDataClientDriver.cs:line 42
InnerException:
Nếu tôi thay đổi NHibernate.Driver.OracleDataClientDriver sang NHibernate.Driver.OracleClientDriver (MS provider for Oracle), thử nghiệm thành công. Ai đó có thể cho tôi biết tôi đang làm gì sai?
Cảm ơn! Điều đó cố định nó! –
@SilasHansen: Nếu điều này giải quyết được vấn đề của bạn, bạn nên đánh dấu Câu trả lời là Đã chấp nhận. –
Đã thêm phần thời gian chạy trong app.config; thay đổi các hành động xây dựng của Oracle.DataAccess để "Sao chép địa phương", vẫn có cùng một lỗi trên cửa sổ của tôi 7 (64 bit) máy. Đường dẫn tham chiếu của Oracle.DataAccess là: C: \ Windows \ assembly \ GAC_32 \ Oracle.DataAccess \ 2.112.1.0__89b483f429c47342 \ Oracle.DataAccess.dll – PerlDev