2015-06-11 14 views
8
  • Entity Framework 6,1

Tôi có một thủ tục lưu trữ mà trả về kết quả sau đây:Entity Framework sử dụng Database.SqlQuery(), nơi tên cột không hợp lệ C tên # thành viên

enter image description here

Vì vậy, tự nhiên những tên trường đó không phải là số nhận dạng hợp lệ cho kết quả POCO mà tôi đã sửa đổi thành:

public class AdHoc_UspGetPassengerCountByAgeReturnDto 
{ 
    public Int32? _0_18 { get; set; } 
    public Int32? _19_30 { get; set; } 
    public Int32? _31_40 { get; set; } 
    public Int32? _41_50 { get; set; } 
    public Int32? _51_60 { get; set; } 
    public Int32? _61_70 { get; set; } 
    public Int32? _71_80 { get; set; } 
    public Int32? _81plus { get; set; } 
} 

Theo kết quả của các tên thuộc tính thay đổi như sau: giá trị

public List<AdHoc_UspGetPassengerCountByAgeReturnDto> AdHoc_UspGetPassengerCountByAge(out int aProcResult) 
{ 
    SqlParameter procResultParam = new SqlParameter {ParameterName = "@procResult", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output}; 

    List<AdHoc_UspGetPassengerCountByAgeReturnDto> procResultData = 
      Database.SqlQuery<AdHoc_UspGetPassengerCountByAgeReturnDto>("EXEC @procResult = [AdHoc].[usp_GetPassengerCountByAge] ", procResultParam).ToList(); 

    aProcResult = (int) procResultParam.Value; 
    return procResultData; 
} 

lợi nhuận null vì tên không khớp. Vì vậy, những gì tôi đang cố gắng để làm việc ra là làm thế nào tôi thực hiện cuộc gọi SP nhưng trả lại một số loại chung chung để tôi có thể làm bản dịch giữa những gì được trả lại cho Adhoc_UspGetPassengerCountByAgeReturnDto của tôi.

Ai đó có thể chỉ cho tôi đúng hướng không?

Trả lời

5

Rất tiếc, không thể ánh xạ các cột. Điều này đã được yêu cầu trong nhiều năm, và nhận được hỗ trợ cuối cùng làm cho nó vào "Đề xuất" tình trạng trên codeplex, nhưng nó chỉ là không có được nêu ra với SqlQuery.

Link: http://entityframework.codeplex.com/workitem/233?PendingVoteId=233

Cập nhật với công việc xung quanh

Nếu bạn có thể sửa đổi proc lưu trữ của bạn, đó là cách tốt nhất để thực hiện các lĩnh vực phù hợp. Nếu không thể, bạn có thể tạo biến bảng chứa các cột đầu ra mong muốn để khớp với poco của bạn, sau đó INSERT/EXEC vào biến bảng và cuối cùng là SELECT * từ biến bảng. Sau đó, lệnh SQL của bạn sẽ trở thành:

DECLARE @Data TABLE (
    _0_18 INT, 
    _19_30 INT, 
    _31_40 INT, 
    _41_50 INT, 
    _51_60 INT, 
    _61_70 INT, 
    _71_80 INT, 
    _81plus INT 
) 
INSERT @Data 
    EXEC @procResult = [AdHoc].[usp_GetPassengerCountByAge] 
SELECT * FROM @Data 
+0

Điều đó khá thú vị .... Tôi không thể sửa đổi SP để sử dụng SQL hoạt động và điều đó hoạt động. Đáng tiếc nó phải được thực hiện theo cách đó, nhưng bạn không thể có mọi thứ ;-) – TheEdge

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