2015-03-12 14 views
11

Tôi đang cố gắng trả về danh sách int từ một thủ tục được lưu trữ trong Entity Framework.Danh sách trả về khung thực thể từ thủ tục được lưu trữ

Tôi đã tạo thủ tục lưu sẵn và thêm nó vào khung thực thể. Tôi đang cố gắng để ràng buộc nó vào một loại phức tạp nhưng khi tôi mở chức năng nhập khẩu.

Tự động tạo loại phức tạp chỉ trả về int thay vì tập hợp kết quả.

Có ai biết cách tôi có thể nhập thực thể trả về danh sách dưới dạng tập hợp kết quả không?

+2

Hiện chúng tôi một số mã bạn đã có vì vậy chúng tôi có thể giúp. – DavidG

+0

Điều này không thực sự liên quan đến mã. Tôi có thể thêm một lớp trống với một danh sách các int trong đó nhưng đây là GUI liên quan, tôi không sử dụng mã đầu tiên, vì vậy nó phải được tất cả thông qua GUI. –

+0

Tôi có một thủ tục lưu trữ mà về cơ bản chỉ cần chọn một danh sách các id tôi muốn lấy rằng trong C# –

Trả lời

11

Tôi tạo ra mẫu này thủ tục lưu trữ trả về một danh sách các int giá trị:

CREATE PROCEDURE dbo.GetListOfInt 
AS BEGIN 
    SELECT * 
    FROM 
    (VALUES (42), (4711), (8088), (80286), (80486), (655235)) AS VT(VC) 
END 

tôi sau đó đã thêm quy trình được lưu trữ này vào mẫu EF .edmx và đã tạo chức năng này Nhập:

enter image description here

Truy vấn các thủ tục lưu trữ cho thấy tôi rằng nó trả về một tập kết quả bao gồm int giá trị - tôi do đó xác định giá trị trả về là một bộ sưu tập vô hướng: Int32 trong hộp thoại chức năng nhập khẩu.

Sau đó, tôi có thể gọi đó là thủ tục lưu trữ và lấy lại kết quả như thế này:

using (testEntities ctx = new testEntities()) 
{ 
    ObjectResult<int?> result = ctx.GetListOfInt(); 

    foreach (int intValue in result.AsEnumerable()) 
    { 
     Console.WriteLine("INT value returned: {0}", intValue); 
    } 
} 
+1

Nếu bạn vẫn còn xung quanh bạn xảy ra để biết tại sao, nó ban đầu trả về một nullable kết quả thiết lập, khi ở bước hai bạn có thể thấy rằng nullable là false –

+1

@Space: Tôi đã tự hỏi rằng bản thân mình - không chắc chắn, xin lỗi.Tôi đoán EF không thể chắc chắn rằng ít nhất một hàng được trả về - thủ tục được lưu trữ (nếu nó thực tế hơn một chút) cũng có thể không trả về gì cả (nếu không có hàng nào phù hợp trong bảng cho 'WHERE' tiêu chí được cung cấp) –

+0

Điều đó có ý nghĩa, một lần nữa cảm ơn sự chuyên môn của bạn –

13

Nếu bạn chỉ cố gắng lấy danh sách từ quy trình được lưu trữ, bạn không cần phải ánh xạ bất kỳ điều gì đặc biệt.

Chỉ cần gọi nó như thế này:

var results = dbContext.Database.SqlQuery<int>("SP_YourSP").ToList(); 

này sẽ trả về một danh sách các ints

+1

Tôi sẽ thử nó ra –

+1

Điều này làm việc cho tôi. Đó là một ngoại lệ đối với ánh xạ đối tượng, nhưng hoàn thành công việc mà không cần phải làm thêm đau đầu – 1c1cle

+0

@AntoinePelletier MVC và WebForms phải làm gì với công nghệ bạn đang sử dụng để truy cập cơ sở dữ liệu của bạn? –

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