Tôi có một cơ sở dữ liệu với các bảng rất lớn (một số có thể có hơn 1.000.000 bản ghi) và mọi người dùng cơ sở dữ liệu này sẽ thấy một số dữ liệu này, vì vậy chúng tôi có nhiều TVF (Bảng giá trị chức năng) có được một ID người dùng và chọn những bản ghi của bảng hiển thị cho người dùng đó (thao tác này yêu cầu nhiều câu lệnh SELECT
và tôi nghĩ rằng gọi TVF là tốt hơn nhiều so với thực hiện nó trong mã). Trong bản phát hành đầu tiên của chương trình cho khách hàng của tôi, tôi đã có một lớp học với nhiều thuộc tính của loại IQueryable
được triển khai bằng cách sử dụng LinqToSql và nó hoạt động rất tốt. Bây giờ tôi có một khách hàng muốn sử dụng assembly của tôi để viết một dịch vụ dữ liệu WCF, vì vậy tôi phải viết một lớp bắt nguồn từ DbContext
(sử dụng EF) có thể được sử dụng trong dịch vụ được chỉ định. Vấn đề của tôi là:Tạo một bộ từ Bảng có giá trị trong khung thực thể
DbContext
tự động phơi bày tất cảDbSet
tài sản mà theo quy định tại nó, vì vậy mỗi người dùng với mức tối thiểu là truy cập có thể nhìn thấy toàn bộ dữ liệu của bảng (các ứng dụng dĩ nhiên khách hàng sẽ hạn chế dữ liệu, nhưng khách hàng có thể truy cập dữ liệu trực tiếp và thậm chí nhập dữ liệu đó vào Excel hoặc Truy cập bằng OData)Tôi có nhiều thuộc tính công khai loại
IQueryable
nhưng chúng sẽ không xuất hiện trong danh sách dữ liệu tiếp xúc với dịch vụ dữ liệu WCF.
Để giải quyết vấn đề này, tôi nghĩ giải pháp hoàn thiện nhất là có thể gọi TVF làm bàn và tạo một bộ từ đó. Nhưng tôi không biết làm thế nào để làm điều này ?!
Note Bất kỳ sự thay đổi cơ sở dữ liệu yêu cầu một số khai thác gỗ, vì vậy tôi đã được lưu trữ thủ tục để làm những thay đổi đó, vì vậy tôi chỉ yêu cầu chỉ đọc truy cập vào dịch vụ dữ liệu WCF của tôi và tôi không muốn bộ mặc định có chứa tất cả các bản ghi của các bảng được xuất bản trong dịch vụ
tôi không chắc chắn, nhưng tôi nghĩ bạn chỉ có thể sử dụng một câu lệnh Select giống như khi bạn chọn Select from a Table để điền dữ liệu. – Malachi
@Malachi cảm ơn câu trả lời của bạn, nhưng tôi có thể (và thực sự tôi đã làm) lấy IQueryable từ TVF của tôi, nhưng vấn đề là dịch vụ dữ liệu WCF chỉ hiển thị tất cả các thuộc tính DbSet của DbContext của tôi, tôi muốn ẩn tất cả các thuộc tính và hiển thị thuộc tính IQueryable của tôi thay vào đó, nhưng tôi không biết làm thế nào! – BigBoss
Bạn không thể tạo một lớp dịch vụ hạn chế quyền truy cập vào TVF của bạn? –