gpt4 book ai didi

c# - NpgSql - 如何从 EF 核心异步调用存储过程(void 函数)

转载 作者:行者123 更新时间:2023-11-29 13:19:47 24 4
gpt4 key购买 nike

我认为这里有几个问题。

首先,所有关于从 EF 核心调用函数的文档似乎都假设我正在等待结果集。例如:

_context.Set<MyEntity>().FromSql<MyEntity>("select myDbFunction({0})", myParam);

但是,我有一个后台作业,我想在插入或更新某些实体后运行(它编目一些 json 以便更快地搜索)。

这是我计划采用的方法,或者类似的方法:

    private void AsyncQueryCallback(Task QueryTask)
{
if (QueryTask.Exception != null)
{
System.Diagnostics.Debug.WriteLine(QueryTask.Exception.ToString());
}
}

public void UpdateAccessionAttributes(int AccessionId)
{
var cancelToken = new System.Threading.CancellationToken();
var idParam = new Npgsql.NpgsqlParameter("accessionId", NpgsqlTypes.NpgsqlDbType.Integer);
idParam.Value = AccessionId;

_context.Database.ExecuteSqlCommandAsync("generate_accession_attributes @accessionId", cancelToken, new[] { idParam }).ContinueWith(AsyncQueryCallback);

}

当然,Postgres 不支持命名参数等。

我在错误处理方面也有点摸不着头脑。我不想/不需要等待 - 只需要一个回调函数来记录任何错误...

一如既往地感谢您的帮助!

最佳答案

完成您正在尝试做的事情的最简单方法可能如下:

_context.Database.ExecuteSqlCommand("SELECT generate_accession_attributes({0})", AccessionId);

如果您不想使用异步,则调用 ExecuteSqlCommand(同步版本)而不是 ExecuteSqlCommandAsync。您可以在此之后立即放置日志记录行(而不是回调),任何问题都会像往常一样生成异常。

关于c# - NpgSql - 如何从 EF 核心异步调用存储过程(void 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44053247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com