Entity Framework DTO 的存储列映射问题

Entity Framework stored column mapping issue with DTO

我正在使用存储过程从数据库中检索列,并通过 EF 代码优先方法将值绑定到我的 DTO class。

我在获取 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 class 获取值

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 语句没有 return 任何名称为 ReferenceNumber 或 BookingNumber 的列。 属性 对象中的名称必须与数据 reader 中的名称相匹配才能正常工作。您可以重命名数据库列以匹配模型中的确切属性名称,或者重命名模型中的 属性 名称以匹配数据库列名称。

或者,您可以按如下方式重写您的 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 参数从数据库中检索单个实体,因此无需调用 ToList 扩展方法。使用 .SingleOrDefaultAsync()