为什么EF 6存储过程/功能导入无法异步编程?

时间:2016-12-20 15:31:38

标签: c# entity-framework asp.net-mvc-4 stored-procedures asp.net-web-api

我已经进行了大量的搜索超过2周,但找不到答案。 堆栈溢出中存在大量场景......但没有一个给出正确的答案。

那么,简单来说,存储过程/ EF6中的函数导入是异步的吗?

我尝试过Stack Overflow的几个解决方案。但只能解决我项目的一部分。

我的数据层是数据库优先。 95%的数据库调用来自存储过程。

例如 1.

public async void TrackPageVisits(int? WebsiteId, int? VisitID, int? CurrentPageId, int? FromPageId)
        {
            using (var ovc = new OVCSEntities())
            {
                await ovc.Visit_TrackPageVisit(WebsiteId, VisitID,   CurrentPageId, FromPageId);
            }
        }

这最终会告诉我int不包含'GetAwaiter'.........

2.我将其转换为

 public async  void TrackPageVisit(int? WebsiteId, int? VisitID, int? CurrentPageId, int? FromPageId)
    {
        using (var ovc = new OVCSEntities())
        {
            await Task.Run(() => ovc.Visit_TrackPageVisit(WebsiteId, VisitID, CurrentPageId, FromPageId));
        }
    }

但这只适用于无效或简单数据返回

  1. 如下所示返回记录集时会变得复杂

     public async Task<ProductProfileByCountry> GetProductProfileDetail(int WebsiteVersion, int Position, int CountryId, int SalesType)
    {
        using (var ovcs = new OVCSEntities())
        {
            ProductProfileDetails productDetails = await ovcs.ProductProfile_GetSelectedProductProfileDetails(WebsiteVersion, Position, CountryId, SalesType).FirstOrDefault();
    
            return new ProductProfileByCountry()
            {
                DisplayName = productDetails.DisplayText,
                CurrencySymbol = productDetails.CurrencySymbol,
                PictureUrl = productDetails.PictureURL,
                Save = productDetails.SavePrice != null ? (decimal)productDetails.SavePrice : 0,
                ProductPrice = productDetails.ProductPrice != null ? (decimal)productDetails.ProductPrice : 0
            };
        }
    } 
    
  2. 这里,ProductProfileByCountry是一个函数导入结果集。它说 ProductProfileByCountry没有GetAwaiter ........

    所以,基本上,我找不到使用任务异步模式(TAP)处理复杂存储过程的方法。

    我在网上找到的是从表中进行的简单数据库调用。

    我是否有必要使用TAP进行存储过程调用? 如果是,怎么样?

    感谢您的帮助。

0 个答案:

没有答案