Entity Framework DTO 的存储列映射问题
Entity Framework stored column mapping issue with DTO
我正在使用存储过程从数据库中检索列,并通过 EF 代码优先方法将值绑定到我的 DTO class。
我在获取 ReferenceNumber
、BookingNumber
属性的值时遇到问题。我得到这些属性的空值。
通过 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()
我正在使用存储过程从数据库中检索列,并通过 EF 代码优先方法将值绑定到我的 DTO class。
我在获取 ReferenceNumber
、BookingNumber
属性的值时遇到问题。我得到这些属性的空值。
通过 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()