Làm cách nào để xem SQL được tạo bởi nHibernate? phiên bản 1.2Làm cách nào để xem SQL được tạo bởi nHibernate?
Trả lời
Bạn có thể đặt một cái gì đó như thế này trong App.config/web.config tập tin của bạn:
trong configSections nút:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
trong nút cấu hình:
<log4net>
<appender name="NHibernateFileLog" type="log4net.Appender.FileAppender">
<file value="logs/nhibernate.txt" />
<appendToFile value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="NHibernate.SQL" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="NHibernateFileLog"/>
</logger>
</log4net>
Và đừng quên gọi
log4net.Config.XmlConfigurator.Configure();
ở lần khởi động của ứng dụng của bạn, hoặc để đặt
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
trong AssemblyInfo.cs
Trong cài đặt cấu hình, thiết lập các "show_sql" bất động sản là true.
Sử dụng trình biên dịch máy chủ sql.
CHỈNH SỬA (1 năm sau): Khi @Toran Billups nêu rõ dưới đây, hồ sơ NHibernate Ayende viết rất rất hay.
Nhanh hơn rất nhiều so với việc lướt qua MB tệp nhật ký. –
Trong cài đặt cấu hình, hãy đặt thuộc tính "show_sql" thành true. Điều này sẽ làm cho SQL được xuất ra trong nhật ký của NHibernate do log4net cung cấp.
Tốt. Tôi quên mất điều đó. * nhấp * –
Tại sao đây không phải là câu trả lời được chấp nhận? :) Cảm ơn vì tiền hỗ trợ. –
Điều này không hiển thị đầy đủ SQL cho tôi. Tôi thấy không phải giá trị thực tế, một cái gì đó như thế này: 'SELECT application0_.ApplicationId như app === App1_101_1_, application0_.ApplicationNumberCounty như ApplicationNu2_101_1 ...' –
Có một tham chiếu tốt cho việc ghi nhật ký NHibernate tại: How to configure Log4Net for use with NHibernate. Nó bao gồm thông tin về việc ghi nhật ký tất cả các câu lệnh SQL do NHibernate tạo ra.
Nhibernate Profiler là một tùy chọn, nếu bạn phải làm bất cứ điều gì nghiêm trọng.
Bạn cũng có thể thử NHibernate Profiler (bản dùng thử 30 ngày nếu không có gì khác). Công cụ này là tốt nhất xung quanh IMHO.
này sẽ không chỉ hiển thị các SQL được tạo ra nhưng cũng cảnh báo/góp ý/etc
Deffo - +1. Nó không tồn tại khi câu hỏi này được hỏi! –
Không hoạt động với SQL CE (mặc dù nó được quảng cáo như vậy), chỉ là FYI –
Nếu bạn đang sử dụng SQL Server (không Express), bạn có thể thử SQL Server Profiler.
Tôi hơi muộn một chút, nhưng điều này thực hiện thủ thuật và nó là công cụ/db/framework độc lập. Thay vì các tùy chọn hợp lệ, tôi sử dụng NH Interceptors.
Lúc đầu, thực hiện một lớp học kéo dài NHibernate.EmptyInterceptor và thực hiện NHibernate.IInterceptor:
using NHibernate;
namespace WebApplication2.Infrastructure
{
public class SQLDebugOutput : EmptyInterceptor, IInterceptor
{
public override NHibernate.SqlCommand.SqlString
OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
System.Diagnostics.Debug.WriteLine("NH: " + sql);
return base.OnPrepareStatement(sql);
}
}
}
Sau đó, chỉ cần vượt qua một ví dụ khi bạn mở phiên của bạn. Hãy chắc chắn chỉ làm điều đó khi ở DEBUG:
public static void OpenSession() {
#if DEBUG
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession(new SQLDebugOutput());
#else
HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession();
#endif
}
Và đó là nó.
Từ giờ trở đi, các lệnh sql của bạn như thế này ...
var totalPostsCount = Database.Session.Query<Post>().Count();
var currentPostPage = Database.Session.Query<Post>()
.OrderByDescending(c => c.CreatedAt)
.Skip((page - 1) * PostsPerPage)
.Take(PostsPerPage)
.ToList();
.. được trình bày thẳng vào cửa sổ Output của bạn:
NH: chọn diễn viên (count (*) như INT) như col_0_0_ từ bài viết post0_
NH: chọn post0_.Id như Id3_, post0_.user_id là user2_3_, post0_.Title là Tiêu đề3_, post0_.Sugug là Slug3_, post0_.Content là Content3_, post0_.created_at như created6_3_, post0_.updated_at as updated7_3_, post0_.deleted_at as deleted8_3_ from posts post0_ đặt hàng bởi post0_.created_at desc limit? bù lại ?
- 1. Cách biết truy vấn được tạo bởi Fluent NHibernate
- 2. Làm cách nào để xem SQL ActiveRecord tạo?
- 3. Cách đơn giản để xem truy vấn SQL được tạo bởi báo cáo SSRS?
- 4. Làm thế nào để có được NHibernate tạo ra SQL trong mã tại thời gian chạy?
- 5. Làm cách nào để ghi đè tập lệnh SQL được tạo bởi MigratorScriptingDecorator
- 6. Làm cách nào để xem tệp nhật ký được tạo bởi màn hình (screenlog.0)
- 7. Cách lấy sql được tạo bởi khung thực thể
- 8. thạo Nhibernate Mapping cho Sql Xem
- 9. Cách xem SQL được tạo từ khung thực thể?
- 10. Entity Framework thứ tự sql được tạo bởi Savechanges()
- 11. xem SQL được thực hiện bởi Jasper báo cáo
- 12. Cách để xem SQL được thực thi bởi LINQ trong Visual Studio?
- 13. Làm thế nào để xem các câu lệnh SQL được tạo LINQ?
- 14. Làm cách nào để xóa các chế độ xem rõ ràng được tạo bởi những người dùng khác?
- 15. Đường ray: Làm cách nào để tìm kiếm thẻ được tạo bởi Act_As_Taggable_On với PG_Search? (postgresql)
- 16. Làm cách nào để tối ưu hóa truy vấn này được tạo bởi SQLAlchemy?
- 17. Xem mã được tạo bởi @synthesize cho getter/setter
- 18. NHibernate - Thực thi SQL để điền DTO
- 19. Làm cách nào để truy cập các giá trị được tạo bởi serializeArray trong JQuery?
- 20. Làm cách nào để đổi tên Context.tt được tạo bởi Entity Framework?
- 21. Làm cách nào để gỡ lỗi mô-đun được tạo bởi Module :: Starter?
- 22. Làm cách nào để lưu tệp hình ảnh được tạo bởi thẻ canvas bằng heatmap.js?
- 23. Làm cách nào để xuất bản một trang web được tạo bởi Node.js lên Github Pages?
- 24. NHibernate đang tạo SQL với tham gia không hợp lệ
- 25. Làm cách nào để kiểm tra xem USER đã được tạo trong cơ sở dữ liệu hay không trong SQL?
- 26. Làm thế nào để kiểm tra xem một tập tin đã được tạo ra bởi dưa chua?
- 27. Làm thế nào để có được thành thạo NHibernate làm việc với NHibernate 3.x
- 28. Cách khôi phục tệp SQL được tạo bởi MySQLDump bằng dấu nhắc lệnh
- 29. Làm cách nào để tạo điều kiện thủ tục được lưu trữ trong SQL Server?
- 30. Làm cách nào để xác định xem hình ảnh đã được tạo ảnh?
Tôi tìm thấy SQL được đăng nhập ở mức DEBUG để bạn có thể muốn đảm bảo mức logger là DEBUG. – stimms
chỉnh sửa xong! – mathieu
Mục tiêu cuối cùng của tôi là đọc sql từ NHibernate, xem [ở đây bài đăng khác] (http://stackoverflow.com/questions/8244083/how-to-read-sql-generated-by-nhibernate-in-visual-studio) – freeflying