2015-07-06 66 views
11

Có cách nào để thiết lập thời gian trên toàn cầu mà bạn sẽ đợi để kết nối với cơ sở dữ liệu đã cho trước khi kết nối không thành công trong NHibernate (thời gian chờ kết nối)? Trong ADO.NET bạn có thể làm điều đó cho một kết nối duy nhất như thế này:NHibernate: cách đặt thời gian chờ kết nối

new SqlConnection().ConnectionTimeout = 10; 

tôi thấy làm thế nào để thiết lập thời gian bạn sẽ chờ đợi cho một tập kết quả, trước khi một sự thất bại here (timeout lệnh) thực hiện lệnh. Nhưng, rõ ràng, đó không phải là những gì tôi cần

Trả lời

9

Bạn có thể đặt nó trên chuỗi kết nối, "Connection Timeout = x".

+0

là cách đơn giản nhất để giải quyết vấn đề trong trường hợp của tôi. Trong một số trường hợp khác có thể tốt hơn để viết [nhà cung cấp kết nối tùy chỉnh] (https://davidhogue.com/blog/2012/02/plugging-in-a-connectionprovider-to-nhibernate-to-connect-to-multiple- cơ sở dữ liệu /) và lập trình thiết lập thuộc tính IDbConnection.ConnectionTimeout –

+3

Lưu ý rằng 'x' ở đây là thời gian được biểu thị bằng giây. –

12

Bạn có thể sử dụng cài đặt command_timeout trong mã cấu hình NHibernate của mình. Xem phần 3.4 of the documentation để biết chi tiết đầy đủ.

Cấu hình XML cho điều này là như sau ...

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property> 
     <property name="connection.connection_string"> 
      Server=(local);initial catalog=theDb;Integrated Security=SSPI 
     </property> 
     <property name="command_timeout">100</property> 
    </session-factory> 
</hibernate-configuration> 

<!-- other app specific config follows --> 

Tôi đang sử dụng thành thạo NHibernate do đó, mã cấu hình của tôi là như sau ...

FluentConfiguration configuration = Fluently.Configure() 
         .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionString)) 
         .ExposeConfiguration(cfg => cfg 
          .SetProperty("command_timeout", "100") 
         .Mappings(m => 
         { 
          var cfg = CreateAutomappings(); 
          m.AutoMappings.Add(cfg); 
         }); 
+3

Có sự khác biệt giữa thời gian chờ _command và thời gian chờ _Connection_. Vui lòng tham khảo [tại đây] (https://nirajrules.wordpress.com/2012/02/08/connectiontimeout-vs-commandtimeout/). Mã bạn đã cung cấp, đặt thời gian chờ lệnh, nhưng tôi cần có cách để đặt thời gian chờ kết nối –

+0

Thời gian chờ kết nối! = Thời gian chờ kết nối tức thời là thời gian chờ kết nối sẵn có nhưng thời gian chờ lệnh là thời gian thực hiện lệnh tối đa –

1

Với NHibernate bạn có thể cung cấp các kết nối tự hỏi:

sessionFactory.openSession(myConnection); 

tôi sẽ không khuyên bạn nên nó, bởi vì nó dễ dàng hơn khi phiên được quản lý bởi NHibernate.

Bạn vẫn có thể viết nhà cung cấp kết nối của riêng mình, thiết lập bất kỳ điều gì bạn muốn trên các kết nối đã tạo.

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