2010-10-28 28 views
10

Như tiêu đề cho biết, làm thế nào để tôi xem SQL được tạo bởi khung thực thể từ bên trong mã của tôi? Tôi đang gặp lỗi khi EF bị lỗi vì một trường được tạo ra bởi cơ sở dữ liệu (trường DateTime), và tôi nghĩ rằng tôi đã thiết lập để biết rằng cửa hàng đang tạo ra nó thông qua StoreGeneratedPattern, nhưng nó vẫn bị treo, vì vậy tôi muốn biết chính xác nó đang cố gắng đẩy lên cơ sở dữ liệu.Cách xem SQL được tạo từ khung thực thể?

P.S. Tôi đã chỉ sử dụng EF trong khoảng một giờ rồi ... Chuyển từ L2S.

Trả lời

16

Vì bạn không có Sql Profiler, lựa chọn tốt nhất của bạn sẽ là LINQPad. Bạn có thể sử dụng hội đồng hiện có của bạn.

Nhấp vào Add connection ->Use a typed data context from your own assembly ->Entity framework và chọn dll của bạn.

Bạn có thể viết truy vấn trực tiếp đối với mô hình của mình (hoặc sao chép-dán từ mã của bạn). Chọn tab SQL 'trong cửa sổ truy vấn để xem mã SQL được tạo.

+0

Trong ngữ cảnh câu hỏi của tôi, bạn có giải pháp tốt nhất. Nó hoạt động như một say mê. Cảm ơn! – Gup3rSuR4c

+0

Cảm ơn bạn! Đây là giải pháp miễn phí và đơn giản nhất. – Funbit

2

Một giải pháp là chụp lưu lượng mạng và xem dữ liệu ở cấp đó. Microsoft Network Monitor thực hiện tốt công việc này.

Tất nhiên, điều đó chỉ hoạt động nếu bạn đang sử dụng máy chủ DB riêng và kết nối không được mã hóa.

3

Nói chung, bạn nên luôn sử dụng SQL Profiler để xem các câu lệnh SQL được gửi bởi EF vào cơ sở dữ liệu của bạn.

Ngoài ra, tôi nghĩ bạn hiểu nhầm về những gì StoreGeneratedPattern là. Nếu bạn xem xét các giá trị có thể bên trong mô hình, bạn sẽ thấy giá trị có thể là danh tính có nghĩa là giá trị sẽ được tạo (bởi cơ sở dữ liệu) khi hàng được chèn vào và sẽ không thay đổi. Các tùy chọn khác là Điện Toán, trong đó quy định rằng giá trị sẽ được tạo ra trên chèn và cập nhật, và Không, đó là mặc định.
Vì vậy, EF sẽ không tạo trường DateTime đó cho bạn, bạn cần tạo thủ công và sau đó cập nhật mô hình của bạn từ cơ sở dữ liệu để EF tạo ra siêu dữ liệu thích hợp để làm việc với nó khi chạy.

+0

Tôi chưa cài đặt profiler và tôi không thấy nó là một tính năng tôi có thể thêm khi chạy lại thiết lập, thật đáng buồn, đó là một kết thúc chết. Theo như 'StoreGeneratedPatern', tôi khá chắc chắn rằng tôi hiểu nó một cách chính xác khi tôi đọc nó trên MSDN. Trừ khi * Identity * chỉ dành cho các cột PK và không có gì khác? – Gup3rSuR4c

+0

Dù bằng cách nào, làm thế nào để khắc phục vấn đề của EF chặn các giá trị tạo ra cơ sở dữ liệu? – Gup3rSuR4c

+0

Ok, trước tiên bạn cần phải nói cho tôi biết về cách tiếp cận của bạn: Bạn có một cơ sở dữ liệu hiện có và tạo mô hình dựa trên nó hay bạn đang theo một cách tiếp cận mô hình đầu tiên? –

5

Bạn có thể sử dụng Entity Framework Profiler (EFProf). Nó không miễn phí, nhưng có một bản dùng thử 30 ngày. Nó thực hiện nhiều thứ gọn gàng hơn ngoài việc hiển thị cho bạn các câu lệnh SQL.

+1

Tại sao lại là downvote? –

+0

Đây là một công cụ hữu ích, ngoại trừ bạn phải thực sự sửa đổi mã của bạn và thêm một tham chiếu cho công cụ để hoạt động tốt. – Chris

3

AnjLab Sql Profiler miễn phí sẽ hoạt động nếu SQL Profiler thực không có sẵn vì bạn đang sử dụng SQL Server Express: http://anjlab.com/en/projects/opensource/sqlprofiler. Nó không phải là khá tốt đẹp như thật nhưng nó được công việc làm tốt đủ.

+0

Không còn có thể tìm thấy, được thương mại hóa. – Nenotlep

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