NpgSql - 如何從EF核心調用存儲過程(void函數) - 異步

c# entity-framework-core npgsql postgresql

我認為這裡有幾個問題。

首先,所有關於從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);

如果您不想使用async,則調用ExecuteSqlCommand(同步版本)而不是ExecuteSqlCommandAsync。您可以在此之後放置日誌記錄行(而不是回調),任何問題都會像往常一樣生成異常。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow