【发布时间】:2017-05-18 18:41:00
【问题描述】:
我正在使用 VS Code 并遵循 ASP.NET Core/EF Core 教程,并承认我不太清楚 async、await 和 Task 的作用(嗯,我知道前两个,但不是第三个.) 我第一次实现了一个存储库,以及一个与之配套的 UnitofWork 类和接口。这是 UnitofWork 类:
using System.Threading.Tasks;
namespace vega.Persistence
{
public class UnitOfWork : IUnitOfWork
{
private readonly VegaDbContext context;
public UnitOfWork(VegaDbContext context)
{
this.context = context;
}
public async Task CompleteAsync()
{
await context.SaveChangesAsync();
}
}
}
当我将鼠标悬停在 CompleteAsync 操作名称上时,除了 VS-Code intellisense 显示的主题行错误之外,我还得到以下信息:
'UnitOfWork.CompleteAsync()': not all code paths return a value [AppName]
其他可能相关的sn-ps:
using System;
using System.Threading.Tasks;
namespace vega.Persistence
{
public interface IUnitOfWork
{
Task CompleteAsync();
}
}
在我的 Startup.cs 中:
public void ConfigureServices(IServiceCollection services)
{
// Add Repository and UnitOfWork --scoped (instance persits for life of request),
// not Transient or Singleton
services.AddScoped<IVehicleRepository, VehicleRepository>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
}
【问题讨论】:
-
真的很奇怪,我看不出你的代码有什么问题。也许这是 VS Code 的一个错误。您是否尝试在项目所在的文件夹中运行
dotnet build以查看是否收到任何错误消息?顺便说一句,在使用 EF 时编写一个工作单元并不是很有用,DataContext 已经是一个 UnitOfWork 实现。如果您想将 DataContext 排除在控制器之外,您应该编写一个服务。 -
是的。 =>
Build FAILED. Persistence\UnitOfWork.cs(14,23): error CS1983: The return type of an async method must be void, Task or Task<T> [C:\Users\..\Vega.csproj] 0 Warning(s) 1 Error(s) -
也恢复了项目,并重启了VS Code。
-
你使用哪个版本的 .NET Core
dotnet --version?您可以将您的项目发布到 GitHub 或以其他方式提供对它的访问权限吗? -
而错误信息是在
CompleteAsync方法上?我刚刚尝试将您的代码复制粘贴到一个新项目中,并且可以确认它确实构建了。您是否从某个地方复制粘贴您的代码?我有时会遇到一些奇怪的行为,“空格”字符不是真正的“空格”并且编译器吓坏了。您可以尝试重新输入(不复制粘贴)CompleteAsync 方法吗?
标签: asp.net-mvc async-await repository-pattern