2013-01-23 26 views
8

Trong dự án DataAccess của tôi, tôi có mã:Tại sao lệnh Sử dụng đưa ra một lỗi mặc dù kiểu của tôi thực hiện IDisposable?

using (TandAEntities dataContext = new TandAEntities()) 
{ 
    // Some code 
} 

này mang đến cho không có lỗi và hoạt động tốt.

Nhưng trong dự án Thử nghiệm đơn vị của tôi, tôi có cùng mã đó, nhưng trình biên dịch đưa ra một lỗi; loại được sử dụng trong tuyên bố sử dụng phải được chuyển đổi hoàn toàn thành 'System.IDisposable'

Tôi đã kiểm tra định nghĩa bằng cách nhấn F12 và thực sự thực hiện IDisposable và có phương pháp vứt bỏ.

Tôi có thể thiếu một số tham chiếu không?

+0

Bạn có thể hiển thị mã kiểm tra đơn vị của bạn không được biên dịch không? –

+1

http://stackoverflow.com/questions/6754021/linq-context-object-isnt-registering-as-a-type-of-system-idisposable-object –

Trả lời

12

Câu trả lời có khả năng nhất trong liên kết trùng lặp - thiếu using System.Data.Linq.

Các tùy chọn khác: bạn có tệp DLL cũ ở đâu đó (tức là được cài đặt trong GAC).

Nếu bạn không thể dễ dàng tìm thấy DLL cũ bằng cách chỉ cần nhìn xung quanh và kiểm tra GAC ​​- thay đổi mã thành một cái gì đó sử dụng loại này nhưng biên dịch và gỡ lỗi thử nghiệm. Kiểm tra Debug-> Windows-> Modules cho vị trí của hội đồng với loại này mà thực sự được sử dụng.

+7

Tôi đã sử dụng System.Data.Linq và không làm việc, nhưng sau đó tôi thêm một tham chiếu đến EntityFramework, và sau đó nó hoạt động. – Cloud9999Strife

+3

Vấn đề là, để thêm tất cả các DLL cần thiết để trình biên dịch có thể tìm kiếm thông qua tất cả chúng để tìm một lớp cơ sở có thể được chuyển đổi thành 'IDisposable'. Ví dụ, lớp 'DataContext' triển khai' IDisposable' tồn tại trong dll EntityFramework. –

+2

Đối với trường hợp của tôi, sau khi tôi thêm tham chiếu System.Data.Linq, lỗi sẽ biến mất – etlds

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