【发布时间】:2021-06-23 12:31:26
【问题描述】:
我正在尝试执行一个返回返回值的存储过程。
但我收到错误消息:
2021-06-23 14:02:37.844 +02:00 [ERR] 类型的成员 f__AnonymousType0`3[[System.Int32,mscorlib,版本=4.0.0.0, 文化=中性,PublicKeyToken=b77a5c561934e089],[System.String, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]] 不能作为参数值
List<Person2> persons = new List<Person2>()
{
new Person2() { Id = 22, FirstName = "Calvin", LastName = "Kattar" },
new Person2() { Id = 23, FirstName = "Edson", LastName = "Barboza" }
};
using (IDbConnection connection = new OracleConnection(GetConnectionString()))
{
try
{
var personProjections = persons.Select(x => new { id = x.Id, first_name = x.FirstName, last_name = x.LastName, out_message = x.OutMessage});
var results = connection.Query<Person2>("kwc_test_person_procedure2",
new { personProjections },
commandType: CommandType.StoredProcedure
);
}
catch (Exception ex)
{
Log.Error(ex.Message);
Log.Error(ex.StackTrace);
throw;
}
}
我的类型是:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Person2 : Person
{
public string OutMessage { get; set; }
}
还有存储过程:
create or replace procedure kwc_test_person_procedure2(
id in number,
first_name in varchar2,
last_name in varchar2,
out_message out varchar2
) is
begin
insert into kwc_test_person(id, first_name, last_name) values (id, upper(first_name), upper(last_name));
out_message := 'The person-ID ' || id || ' has been inserted to database on ' || sysdate;
End kwc_test_person_procedure2;
我在这里做错了什么?
提前致谢!
【问题讨论】:
-
对每个项目执行一个过程会很慢。您可能需要一个表参数(不确定您如何在 Oracle 中执行此操作,我认为您需要一个 UDT),然后通过
.AsTableValuedParameter在 Dapper 中传递它。 -
@Charlieface,谢谢你的建议。我打算使用并行执行。而且程序会在夜间运行,所以速度慢应该不是问题。