【发布时间】:2021-05-16 13:34:10
【问题描述】:
我正在使用 Entity Framework Core 3 来尝试执行存储过程。我需要获取存储过程的返回值,但是,在存储过程中,没有名称。这是我执行存储过程的代码:
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();
这是我的ArfmCreateEditRequestDto 课程:
public class ArfmCreateEditRequestDto
{
[Column(Order = 0)]
public string Retval { get; set; }
}
当我在 SQL Server 上执行此操作时,我得到以下结果:
--------------------------------------
| (No column name) |
--------------------------------------
| RequestID: 36 Succesfully Added |
--------------------------------------
当我运行我的程序时,我得到一个异常提示
"System.InvalidOperationException: The required column 'Retval' was not present in the results of a 'FromSql' operation."
如果我把它改成这样:
[Column("", Order = 0)]
public string Retval { get; set; }
然后我得到这个异常:
"System.ArgumentException: The argument 'name' cannot be null, empty or contain only whitespace. (Parameter 'name')"
我真的认为第一件事会起作用,Entity Framework 只会将订单位置 0 的数据映射到我的属性,但显然它没有。
所以我的问题是,如果列在存储过程中未命名,如何捕获我的返回值?请注意,我根本无法更改存储过程。
【问题讨论】:
-
ArfmCreateEditRequestDto看起来像什么?该存储过程的响应是什么? -
存储过程是否有返回值?可以分享一下存储过程的相关代码吗?
-
@DavidG - 我在我的问题中将代码发布到
ArfmCreateEditRequestDto,并在我的问题中发布了对我存储过程的响应。 -
@ChetanRanpariya - 我在我的问题中发布了对我的存储过程的响应。它只返回一个未命名的
varchar列。
标签: c# asp.net-core entity-framework-core asp.net-core-3.1 entity-framework-core-3.1