2010-11-07 30 views
8

Tôi có vấn đề với ngoại lệ này:NHibernate + SqlServerCE

Hibernate.HibernateException : Could not create the driver from Hibernate.Driver.SqlServerCeDriver. 
----> System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation. 
----> NHibernate.HibernateException : The IDbCommand and IDbConnection implementation in the ssembly System.Data.SqlServerCe could not be found. Ensure that the assembly System.Data.SqlServerCe is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element in the application configuration file to specify the full name of the assembly. 

tôi đã cố gắng tất cả mọi thứ. Tôi googled rất nhiều.

System.Data.SqlServerCe.dll nằm trong thư mục gỡ lỗi. Là địa phương tham chiếu, không phải là tôi GAC. Tôi đã sao chép địa phương đúng sự thật. Trong thư mục gỡ lỗi là tất cả các sql * .dll cần thiết khác. Tôi đã thử x86 biên dịch nhưng nothig.

Đây là cấu hình nhibernate tôi:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 

    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Spring.ProxyFactoryFactory, NHibernate.ByteCode.Spring</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property> 

    <property name="show_sql">true</property> 


    <!-- mapping files --> 

    </session-factory> 
</hibernate-configuration> 

NHibernate phiên bản 3.0 beta 1, SqlServerCe phiên bản 3.5 SP1

Ý tưởng của tôi: Nhibernate vẫn tìm trong GAC, becouse một đã được cài đặt SqlServerCe, sau khi gỡ bỏ cài đặt vấn đề bắt đầu. Làm thế nào tôi có thể nói với NHibernate: "hãy nhìn lấy dll này?" :)

+0

Ông có thể dịch 'Cil vyvolání způsobil výjimku.'? –

+0

Tôi xin lỗi :) Tôi quên. Đã sửa. – Simon

Trả lời

11

Bạn (hoặc dll NHibernate) đang tham chiếu một phiên bản khác của tệp System.Data.SqlServerCe trong dự án so với dự kiến. Ví dụ, NHibernate có thể tham chiếu phiên bản .NET 3.5 của dll, nhưng bạn có phiên bản .NET 4.0 của dll trong GAC hoặc thư mục bin cục bộ. Bạn có thể hướng dẫn .NET framework sử dụng AssemblyBinding cụ thể để sửa vấn đề. Nhập nội dung sau vào tệp cấu hình của bạn để khắc phục.

<runtime> 
    <assemblyBinding 
    xmlns="urn:schemas-microsoft-com:asm.v1"><qualifyAssembly 
    partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, 
    Version=3.5.1.0, Culture=neutral, 
    PublicKeyToken=89845dcd8080cc91"/> 
    </assemblyBinding> 
    </runtime> 

+1

1 Đây là *Câu trả lời chính xác. –

+1

cũng làm việc cho tôi. – rohancragg

+1

Không cần điều này trên phiên bản mới nhất của nHibernate, nhưng không thể thay thế phiên bản cũ hơn và điều này đã khắc phục được sự cố của tôi. – Devgig

0

Hãy thử tải lắp ráp với Assembly.LoadFile với đường dẫn đầy đủ để DLL trước khi NHibernate yêu cầu nó.

NHibernate sẽ tải lắp ráp bằng cách sử dụng Assembly.Load("NHibernate.Driver.SqlServerCeDriver") có thể sẽ tìm trong GAC. Nếu bạn buộc tải nó từ một tệp, Assembly.Load sẽ thông báo rằng tệp đã được tải và chọn tệp bạn đã tải.

+0

Tôi nhận được lỗi này: System.IO.FileLoadException: Không thể tải tệp hoặc lắp ráp 'System.Data.SqlServerCe, Phiên bản = 3.5.0.0, Văn hóa = trung lập, PublicKeyToken = 89845dcd8080cc91 hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định. Tôi đã cố gắng tải dll phụ thuộc nhưng tôi nhận được lỗi này, khi tôi cố gắng tải sqlceca35.dll: System.BadImageFormatException: Mô-đun phải chứa tệp kê khai assembly. (Ngoại lệ đối với HRESULT: 0x80131018) – Simon

+0

Nhận xét của bạn không có thông báo lỗi trong đó. –

+0

Xin lỗi :) Đã sửa chữa ... – Simon

-1

Tôi đã chuyển sang sqllite. Thats làm việc. Có thể xem xét thay đổi mã byte. Tôi đã sử dụng mã byte mùa xuân, có thể lâu đài tốt hơn ....

0

Bạn cũng có thể thiết lập việc sử dụng cụ thể phiên bản cờ false trên các thuộc tính trong VS để tham khảo đó và thiết lập bản sao cục bộ là true