Entity Framework 中的 FromSqlRaw 调用存储过程,不返回任何数据

Hui Liu-MSFT 47,341 信誉分 Microsoft 供应商
2024-04-22T06:27:50.5466667+00:00

我有一个从SQL创建数据CSV的方法。当我在 SQL 中运行 SQL 字符串时,我会收到行,但是当我尝试在应用程序中运行 FromSqlRaw 时,它不会返回任何数据。我正在离开原始 SQL 查询文档,但我找不到我做错了什么。

public RequestAttachment GetExportCsv(string pPms, string pType)  
{  
 //I think I need to use List<object> instead of List<CsvExport> to get the final result into a list of strings to be added to the CSV?  
 List<object> lstExports = _context.CsvExports  
 .FromSqlRaw("EXEC dbo.EEPayableExtract @p_PMS = {0}, @p_Type = {1}", pPms, pType)  
 .ToList<object>();  
  
 //generate csv  
 StringBuilder sb = new();  
 foreach (var item in lstExports)  
 {  
 string[] arrExports = (string[])item;  
 foreach (var data in arrExports)  
 {  
 //Append data with comma(,) separator.  
 sb.Append(data + ',');  
 }  
 //Append new line character.  
 sb.Append("\r\n");  
 }  
 //RequestAttachment is my file model  
 return new RequestAttachment  
 {  
 FileName = "UploadLineItems",  
 Extension = ".csv",  
 DataFiles = Encoding.ASCII.GetBytes(sb.ToString())  
 };  
}  

我的 DbContext 也声明我的模型是无密钥的,正如我在其他一些类似帖子中看到的那样。

modelBuilder.Entity<CsvExport>(entity =>  
{  
    entity.HasNoKey();  
});  

我尝试将其分配给列表,但它仍然不返回数据。

var list = _context.CsvExports  
 .FromSqlRaw("EXEC dbo.EEPayableExtract @p_PMS = {0}, @p_Type = {1}", pPms, pType)  
 .ToList();  

我还尝试按照这篇文章中的建议添加(EF Core 存储过程 FromSqlRaw 不提供更新的值),但仍然没有数据。.AsNoTracking()

List<object> lstExports = _context.CsvExports  
	.FromSqlRaw("EXEC dbo.EEPayableExtract @p_PMS = {0}, @p_Type = {1}", pPms, pType)  
	.AsNoTracking()  
	.ToList<object>();  

Note:此问题总结整理于:FromSqlRaw in Entity Framework calling stored procedure, returns no data

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
49 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 43,046 信誉分 Microsoft 供应商
    2024-04-22T09:11:11.5+00:00

    我创建了一个示例项目进行测试,我可以通过 来获取值。FromSqlRaw

    我认为您的代码是正确的,您可以按照以下步骤进行故障排除。

    1. 在 中运行命令,检查结果。SSMS
    2. 检查项目中的 ConnectionString。

    我的测试步骤

    1. SSMS 中的 exec 过程 148432-image.png
    2. 我的示例代码 148433-image.png
    3. 结果 148444-image.png 我创建了一个示例项目进行测试,我可以通过 来获取值。FromSqlRaw 我认为您的代码是正确的,您可以按照以下步骤进行故障排除。
      1. 在 中运行命令,检查结果。SSMS
      2. 检查项目中的 ConnectionString。
      我的测试步骤
      1. SSMS 中的 exec 过程
        148432-image.png
      2. 我的示例代码
        148433-image.png
      3. 结果
        148444-image.png

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助