2009-06-01 30 views
6

Sử dụng nhibernate, làm thế nào tôi có thể đặt mức giao dịch để đọc không được cam kết?Sử dụng nHibernate, làm thế nào tôi có thể đọc không được yêu cầu?

Với SQL, tôi thường đặt mức giao dịch lúc bắt đầu quy trình được lưu trữ hoặc sử dụng nội tuyến (NOLOCK).

+0

Bất cứ điều gì bạn đang làm, đọc không cam kết thực sự là yêu cầu những rắc rối. Tôi chưa bao giờ thấy một lý do thực sự để sử dụng điều này. Các ứng dụng thực sự vô hiệu hóa cách ly giao dịch không sử dụng giao dịch đúng cách. –

+1

Thats một chút huyền thoại dba. Đối với các dự án web nhỏ và trung bình cơ bản và các ứng dụng khách (mà tôi đoán là nơi phần lớn công việc dân gian), thì đó có lẽ là điều đúng đắn để làm. Quyết định là chi phí so với rủi ro, trong môi trường thời gian thực chạy giao dịch ít hơn với đọc bẩn là khá nhiều tiêu chuẩn. Các trang web thương mại điện tử khổng lồ (như ebay) cũng sẽ chia sẻ nhiều quyết định thiết kế với các ứng dụng RT, mức độ giao dịch cao đến mức chỉ có quá nhiều rủi ro khi sử dụng chúng. Chi phí của rollback sẽ làm tê liệt bạn. – Vman

+0

Martin Fowler đã nhận xét về điều này tại đây: http://martinfowler.com/bliki/Transactionless.html – Vman

Trả lời

3

Bạn có thể sử dụng nolock SQLs in-line với nhibernate bằng cách sử dụng các bước sau:

  1. Tạo HBM file với sau

    <sql-query name="PersonList"> 
    return alias="person" class="Person"> 
    SELECT * FROM Person WITH(nolock) 
    <sql-query> 
    
  2. Sử dụng AddXmlFile(hbm file path) trong khi tạo ra phiên nhibernate.

  3. Sử dụng DBSession.GetNamedQuery("PersonList") lấy danh sách người.

0

này đã làm việc cho tôi (SQL server cụ thể)

IDbCommand NHCommand; 

    NHCommand= NHSession.Connection.CreateCommand(); 

    NHCommand.CommandText= "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"; 

    NHCommand.ExecuteNonQuery(); 

Loại nói chuyện với direclty RDBMS.

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