C# 列映射到未命名列
我正在使用EntityFrameworkCore3来尝试执行一个存储过程。我需要获取存储过程的返回值,但是,在存储过程中,没有名称。以下是执行存储过程的代码:C# 列映射到未命名列,c#,asp.net-core,entity-framework-core,asp.net-core-3.1,entity-framework-core-3.1,C#,Asp.net Core,Entity Framework Core,Asp.net Core 3.1,Entity Framework Core 3.1,我正在使用EntityFrameworkCore3来尝试执行一个存储过程。我需要获取存储过程的返回值,但是,在存储过程中,没有名称。以下是执行存储过程的代码: var data = await _context.Set<ArfmCreateEditRequestDto>() .FromSqlRaw(@"ARFMCreateEditRequest {0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12
var data = await _context.Set<ArfmCreateEditRequestDto>()
.FromSqlRaw(@"ARFMCreateEditRequest {0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25}",
"Add", accountType, srIdentifier, srCheckDigit, arIdentifier, arCheckDigit, customerName, changeCustomerName,
supplierId, amount, paymentMethod, addressType, address1, address2, address3, address4, country, city,
state, zip, statusCode, createdBy, invoiceDate, approvedBy, comments, updateId).ToListAsync();
在SQL Server上执行此操作时,会得到以下结果:
--------------------------------------
| (No column name) |
--------------------------------------
| RequestID: 36 Succesfully Added |
--------------------------------------
当我运行我的程序时,我得到一个异常
System.InvalidOperationException:“FromSql”操作的结果中不存在所需的列“Retval”
如果我将其更改为:
[Column("", Order = 0)]
public string Retval { get; set; }
然后我得到一个例外:
System.ArgumentException:参数“name”不能为null、空或仅包含空格。参数“name”
我真的认为第一件事会起作用,实体框架会将数据从订单位置0映射到我的属性,但显然没有
所以我的问题是,如果存储过程中的列未命名,如何捕获我的返回值?注意,我根本无法更改存储过程。这是不可能的。使用SQLRAW时存在一些限制 1-SQL查询必须返回实体类型的所有属性的数据 2-结果集中的列名必须与属性映射到的列名匹配。注意,此行为与EF6不同。EF6忽略了原始SQL查询的属性到列映射,结果集列名必须与属性名匹配 基于此链接: 但我认为您可以将存储过程包装起来,并使用如下任意列将结果插入临时表:
var data = await _context.Set<ArfmCreateEditRequestDto>()
.FromSqlRaw(@"create table #tmp( Retval nvarchar(128) ) insert into #tmp( Retval ) exec ARFMCreateEditRequest {0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25} select Retval from #tmp",
"Add", accountType, srIdentifier, srCheckDigit, arIdentifier, arCheckDigit, customerName, changeCustomerName,
supplierId, amount, paymentMethod, addressType, address1, address2, address3, address4, country, city,
state, zip, statusCode, createdBy, invoiceDate, approvedBy, comments, updateId).ToListAsync();
ArfmCreateEditRequestDto看起来像什么?该存储过程的响应是什么?存储过程是否返回任何值?您可以共享存储过程的相关代码吗?@DavidG-我在问题中向ArfmCreateEditRequestDto发布了代码,在问题中向我的存储过程发布了响应。@ChetanRanpariya-我在问题中向我的存储过程发布了响应。它只返回一个未命名的varchar列。
var data = await _context.Set<ArfmCreateEditRequestDto>()
.FromSqlRaw(@"create table #tmp( Retval nvarchar(128) ) insert into #tmp( Retval ) exec ARFMCreateEditRequest {0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22},{23},{24},{25} select Retval from #tmp",
"Add", accountType, srIdentifier, srCheckDigit, arIdentifier, arCheckDigit, customerName, changeCustomerName,
supplierId, amount, paymentMethod, addressType, address1, address2, address3, address4, country, city,
state, zip, statusCode, createdBy, invoiceDate, approvedBy, comments, updateId).ToListAsync();