DTO的实体框架存储的列映射问题

时间:2019-09-16 17:22:26

标签: c# .net sql-server linq entity-framework-6

我正在使用存储过程从数据库中检索列,并通过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”,     “名称”:“ ABC”,     “参考编号”:””,     “订单号”:”” }

我们是否可以选择获取这些值?

1 个答案:

答案 0 :(得分:0)

您的select语句不返回任何名称为ReferenceNumber或BookingNumber的列。对象中的属性名称必须与数据读取器中的属性名称匹配才能起作用。您可以重命名数据库列以匹配模型上的确切属性名称,也可以重命名模型上的属性名称以匹配数据库列名称。

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

library(stringr)
df1$Column <- str_extract(df1$Column, "\\b(H|B)\\d+\\b")

由于您要基于id参数从db检索单个实体,因此无需调用ToList扩展方法。使用.SingleOrDefaultAsync()