簡體   English   中英

DTO的實體框架存儲的列映射問題

[英]Entity Framework stored column mapping issue with DTO

我正在使用存儲過程從數據庫中檢索列,並通過EF代碼優先方法將值綁定到我的DTO類中。

我面臨獲取ReferenceNumberBookingNumber屬性的值的問題。 我正在為這些屬性獲取空值。

通過EF代碼優先方法執行存儲過程:

SqlParameter param1 = new SqlParameter("@Id", 1); 
var stocks = await context.Database.SqlQuery<Stock>("dbo.[GetStocks @Id", param1).ToListAsync();

存儲過程以獲取庫存清單:

CREATE PROCEDURE [dbo].[GetStocks]  
    (@id INTEGER)  
AS    
BEGIN  
    SELECT ID, name, RefNo, BookingNo 
    FROM dbo.Stock
END

DTO類獲取值

namespace ConsoleApp6
{
    using System;

    public partial class Stock
    {
       public int ID { get; set; }
       public string name { get; set; }
       public string ReferenceNumber { get; set; }
       public string BookingNumber { get; set; }
    }
}

{“ ID”:“ 1”,“ Name”:“ ABC”,“ ReferenceNumber”:“”,“ BookingNumber”:“”}

我們是否可以選擇這些值?

您的select語句不返回任何名稱為ReferenceNumber或BookingNumber的列。 對象中的屬性名稱必須與數據讀取器中的屬性名稱匹配才能起作用。 您可以重命名數據庫列以匹配模型上的確切屬性名稱,也可以重命名模型上的屬性名稱以匹配數據庫列名稱。

或者,您可以按以下方式重寫您的SP:

 CREATE PROCEDURE [dbo].[GetStocks]  
(  
  (@id INTEGER
  )  
  AS    
 BEGIN  
  SELECT ID, name, RefNo as 'ReferenceNumber ', BookingNo as 'BookingNumber ' from
  FROM dbo.Stock where id =@id
 END

由於您是基於id參數從db檢索單個實體的,因此無需調用ToList擴展方法。 使用.SingleOrDefaultAsync()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM