EntityFrameworkCore FromSqlRaw未正确映射



我有一个名为GetZonesAssignedToCustomer的存储过程,我使用的是实体框架核心,它正在复制映射我已经检查了存储过程,当我在SSMS中运行它时,所有数据都是正确的。

我有一个类看起来像:

public class ZoneSprocResult
{
public string Id { get; set; }
public string ParentId { get; set; }
public string Name { get; set; }
public int ZoneType { get; set; }
public string AddressId { get; set; }
public string StreamId { get; set; }
public bool IsEnabled { get; set; }
public string Tags { get; set; }
}

我调用的存储过程如下:

var a = await _context.Set<ZoneSprocResult>().FromSqlRaw(command).ToListAsync();

这就是OnModelCreating中的样子

protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
/// other entities here
builder.Entity<ZoneSprocResult>()'
/// other entities here
}

然而,它返回的记录数量正确,问题是StreamId重复。所以它几乎就像在这些记录上使用FirstOrDefault

现在,我正在检查自己的理智,并用同样的方法运行了这段代码:

var table = new DataTable();
using var connection = new SqlConnection("My ConnectionString");
using var sqlCommand = new SqlCommand(command, connection);
using var dataAdapter = new SqlDataAdapter(sqlCommand);
dataAdapter.Fill(table);
var checkList = new List<ZoneSprocResult>();
foreach (DataRow row in table.Rows)
{
var result = new ZoneSprocResult()
{
Id = row[0].ToString(),
ParentId = row[1]?.ToString()??String.Empty,
Name = row[2]?.ToString() ?? String.Empty,
ZoneType = int.Parse(row[3].ToString()),
AddressId = row[4].ToString(),
IsEnabled = bool.Parse(row[5]?.ToString()??"0"),
Tags = row[6].ToString(),
StreamId = row[7].ToString(),
};
checkList.Add(result);
}

当我将return a;更改为return checkList;时,哪个是正确的

那么,关于我的问题,有没有一种方法可以映射FromSqlRaw映射结果的方式,如果有,如何映射?

将此代码添加到EF上下文:

public virtual DbSet<ZoneSprocResult> ZoneSprocResults { get; set; }

并用以下内容替换您的模型生成器:

modelBuilder.Entity<ZoneSprocResult>(e =>
{
e.HasNoKey();
});

最新更新