2009-03-06 70 views
18

Tôi gặp phải một lỗi lạ khi sử dụng LINQ-to-sql với các dịch vụ dữ liệu ado.net. Tôi có một ứng dụng Silverlight đơn giản kết nối với một cơ sở dữ liệu từ xa. Lần đầu tiên tôi thêm lớp linq-to-sql và kéo một bảng vào trình thiết kế. Sau đó, tôi đã thêm một dịch vụ dữ liệu ADO.NET, cập nhật tham chiếu DataService để trỏ đến bối cảnh dữ liệu L2S.Dịch vụ dữ liệu ADO.NET với LINQ-to-SQL

Biên dịch không có vấn đề gì.

Khi tôi mở dịch vụ trong IE tôi ngay lập tức nhận được một lỗi vì vậy tôi thêm thuộc tính sau với dịch vụ dữ liệu:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] 

này sẽ trả về thông báo lỗi chi tiết:

Trường hợp ngoại lệ message là 'Về kiểu dữ liệu kiểu dữ liệu' DataClasses1DataContext ', có một thuộc tính IQueryable' table1 'có loại phần tử không phải là một kiểu thực thể. Đảm bảo rằng thuộc tính IQueryable thuộc loại thực thể hoặc chỉ định thuộc tính IgnoreProperties trên kiểu ngữ cảnh dữ liệu để bỏ qua thuộc tính này

điều này xảy ra với bất kỳ bảng cơ sở dữ liệu nào tôi sử dụng trong thiết kế L2S!

Lỗi này là gì và tại sao tôi nhận được lỗi này?

+0

Mỗi điểm cuối có thể được truy cập bằng http: // localhost/{ServiceName}/{EndPointName} – jdiaz

Trả lời

21

Bạn sẽ cần phải trang trí các lớp học của mình bằng thuộc tính DataServiceKey.

Thêm chi tiết trên blog của Marc here và blog MSDN here (sau này nói về nhiều mối quan hệ, nhưng nó bao gồm thuộc tính DatServiceKey).

+0

đã giải thích rất nhiều nhưng tại sao nó không hiển thị cho tôi các thực thể ở định dạng XML? Nó chỉ nói DEFAULT table1. Tôi thậm chí còn sử dụng config.SetEntitySetAccessRule ("table1", EntitySetRights.All); – jdiaz

+0

Ngoài ra nếu không có khóa chính được đặt trên bảng, làm cách nào để biết thuộc tính nào được đặt làm DataServiceKey? – jdiaz

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