我正在使用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智能感知显示的主题行错误之外,我还遇到了这个问题:
'UnitOfWork.CompleteAsync()': not all code paths return a value [AppName]
其他可能相关的片段:
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>();
}
dotnet build
,以查看是否会出现任何错误消息?顺便说一句,在使用 EF 时编写工作单元并不是非常有用,因为 DataContext 已经是一个 UnitOfWork 实现。如果你想将 DataContext 从控制器中排除,应该编写一个服务。 - GimlyCompleteAsync
方法上?我刚试着将你的代码复制粘贴到一个新项目中,可以确认它确实构建成功。你是从其他地方复制粘贴的代码吗?有时候空格字符可能不是真正的“空格”,编译器会崩溃。你能尝试重新输入(而不是复制粘贴)CompleteAsync
方法吗? - Gimly<PackageReference Include="Microsoft.AspNetCore" Version="1.1.0" />
https://github.com/patrickgomes1968/vega - PakiPat