2009-10-27 25 views
7

Tôi đang sử dụng Fluiber NHibernate với tệp 'hibernate.cfg.xml' bên ngoài.Fluent NHibernate - ngoại lệ xảy ra trong khi cấu hình lớp persistence

Tiếp theo là các mã cấu hình mà tôi nhận được lỗi:

 var configuration = new Configuration(); 
     configuration.Configure(); 

     _sessionFactory = Fluently.Configure(configuration) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Template>()) 
       .BuildSessionFactory(); 

     return _sessionFactory; 

Nhưng Khi NHibernate đang cố gắng để cấu hình, tôi nhận được lỗi floowing:

Một ngoại lệ xảy ra trong cấu hình của lớp kiên trì.

Trường hợp ngoại lệ bên trong nói:

The ProxyFactoryFactory was not configured. Initialize 'proxyfactory.factory_class' property of the session-factory configuration section with one of the available NHibernate.ByteCode providers.

Tôi googled và theo một số giải pháp tôi thấy, tôi đã thực hiện những thay đổi sau đây:

  1. Add sau dlls để bin ứng dụng của tôi:

    Castle.Core.dll, Castle.DynamicProxy2.dll, NHibernate.ByteCode.Castle.dll

  2. Added follwing tài sản trong hibernate.cfg.xml

    < property name = "proxyfactory.factory_class" > NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </tài sản >

Nhưng Tôi vẫn nhận được ngoại lệ tương tự.

+3

Nếu bạn bấm trình trợ giúp ngoại lệ trong Visual Studio, bạn có thể thấy 'InnerException' (và có thể là' InnerException' sau đó). Bạn có thể tra cứu chúng và bao gồm càng nhiều thông tin lỗi càng tốt? Họ có thể tiết lộ vấn đề thực tế. – Abel

Trả lời

1

Sự cố có thể nằm trong tệp hibernate.cfg.xml của bạn, kiểm tra kỹ đang sử dụng phiên bản 2.2 và nếu được định dạng tốt.

Việc lập bản đồ nên bắt đầu như thế này:

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

Cùng với các lỗi mà bạn gửi, có thể biết thêm thông tin được cung cấp bởi vì lỗi là khá tổng quát để phân tích cú pháp cấu hình. Nếu không, có thể bạn có thể cung cấp thêm chi tiết về hibernate.cfg.xml của bạn.

0

Vâng, tôi đã có thể giải quyết lỗi đó bằng cách đặt tệp .cfg.xml vào thùng ứng dụng gọi điện.

Nhưng bây giờ, tôi nhận được lỗi khác :-(

FluentNHibernate.Cfg.FluentConfigurationException là unhandled nhắn: Một cấu hình không hợp lệ hoặc không đầy đủ đã được sử dụng trong khi tạo ra một SessionFactory Kiểm tra bộ sưu tập PotentialReasons, và InnerException để biết thêm. chi tiết.

* Cơ sở dữ liệu đã không được cấu hình thông qua phương pháp cơ sở dữ liệu.

Đây là hibernate.cfg.xml của tôi

<?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.MsSql2005Dialect</property> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string">Server=dev\sql2005;Initial Catalog=TestDB;Integrated Security=True</property> 
    <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

Bất kỳ suy nghĩ nào?

+7

Kiểm tra InnerException. –

+2

+1 cho James. Tiếp tục chạy xuống cây exceptinn cho đến khi bạn tìm thấy một cái gì đó hữu ích. –

+2

+1 cho James. Tôi đã có lỗi này và nhìn vào InnerException để tìm thấy một chuỗi kết nối được đặt tên không được tìm thấy, và nhận ra App.config của dự án thử nghiệm của tôi đã thiếu chuỗi kết nối trong Web.config của ứng dụng web của tôi. –

14

Tôi cũng gặp lỗi này.Nó sẽ kích hoạt khi bạn không sao chép tệp ánh xạ (hibernate.cfg.xml) vào thư mục xây dựng.

Giải pháp:

  • Trong giải pháp Explorer, nhấn chuột phải vào file mapping (hibernate.cfg.xml), chọn Thuộc tính, sau đó hãy chắc chắn rằng Copy To Output mụcSao chép nếu mới hơn được chọn).
+1

Cảm ơn KKMCT ... Nó đã giúp tôi rất nhiều :) –

1

ngoại lệ với nội dung của PotentialReasons

* Cơ sở dữ liệu đã không được cấu hình thông qua phương pháp cơ sở dữ liệu.

cũng có thể được ném theo phương pháp FluentConfiguration.BuildConfiguration() trong trường hợp ánh xạ của bạn là sai (ví dụ. * Lớp Bản đồ không được phân tích thành công) và bạn đã cấu hình cơ sở dữ liệu không phải với .Database() phương pháp. Đây là một chút nhầm lẫn rằng nó được phát hiện chỉ ở bước xây dựng cấu hình, không phải khi các lớp này được thêm vào từ lắp ráp (bằng AddFromAssemblyOf <>)

Bạn có thể kiểm tra xem * lớp Bản đồ của bạn được chuyển đổi thành công để HBM . bằng cách thực hiện một dòng m.FluentMappings.Add (typeof (YourMappedTypeMap)) ExportTo (@ "c: \ Temp \ fluentmaps"))

0

Đang cố gắng để cấu hình cơ sở dữ liệu trong App.config và ánh xạ qua thạo NHibernate, tôi cũng có một FluentNHibernateException nói

  • Cơ sở dữ liệu không được định cấu hình thông qua phương thức Cơ sở dữ liệu.

Liên kết để hiển thị chi tiết đã bị hủy kích hoạt, vì vậy tôi không thể nhận thêm bất kỳ thông tin nào. Tìm kiếm giờ tôi cuối cùng đã phát hiện ra rằng chuỗi kết nối của tôi có lỗi ("pasword = xyz;" thay vì "password = xyz;")

5

Như Alex InTechno đã nói, đây có thể là lỗi trong định nghĩa Ánh xạ của bạn tệp hoặc trong các thực thể được ánh xạ. Tôi đã trải qua cùng một lỗi, khi tôi đã quên rằng tất cả các thuộc tính trong các lớp ánh xạ phải được định nghĩa là ảo.

public String Name {get;set;} 
public virtual String Name { get; set; } 
+0

Cảm ơn bạn; đây là giải pháp cho phiên bản cụ thể của lỗi này. ReSharper cảnh báo tôi về việc truy cập một thành viên ảo và đề xuất làm cho lớp được niêm phong, mà tôi chấp nhận như một tổng noob. –

1

tôi đã cùng một vấn đề với các bài kiểm tra NUnit dưới Resharper 8.1

Tick "ReSharper | Options | Tools | Testing Unit | Sử dụng AppDomain riêng cho từng lắp ráp với các bài kiểm tra" hộp kiểm cố định nó

0

Hãy thử đặt modifier được bảo vệ trong set_id và set_sampelList. ví dụ:

public virtual int Id { 
    get; protected set; 
} 

public virtual IList<Store> StoresStockedIn { 
    get; protected set; 
} 
0

tôi bắt đầu nhận được

* Cơ sở dữ liệu đã không được cấu hình thông qua phương pháp cơ sở dữ liệu.

thông báo lỗi trong khi cố gắng kết nối với cơ sở dữ liệu DB/2 mà không thực hiện bất kỳ thay đổi nào đối với mã của tôi. Sau khi xác minh rằng tệp cấu hình đã được sao chép vào thư mục xây dựng và xác minh rằng XML của tôi đã được tạo đúng và phù hợp với phiên bản 2.2, cuối cùng tôi đã kiểm tra cơ sở dữ liệu để đảm bảo rằng không có gì thay đổi.

Hóa ra là mật khẩu cho tài khoản kết nối đã hết hạn. Nó không phải là không hợp lệ cũng không phải là tài khoản không hoạt động - mật khẩu đã hết hạn. Tôi không chắc chắn tại sao mật khẩu đã hết hạn được biểu hiện trong một thông báo lỗi lạ như vậy.

0

Dường như lỗi này có thể là một loạt các thứ khác nhau. Tôi đã nhận được cùng một lỗi và cuối cùng đã tìm ra nó là bởi vì tôi đã loại trừ một cái nhìn không sử dụng và lập bản đồ từ dự án. Không có ý tưởng làm thế nào điều này đã gây ra lỗi nhưng ngay sau khi tôi thêm nó trở lại lỗi đã biến mất.

Các vấn đề liên quan