我正在按照本教程使用 Visual Studio 2019 项目模板在 AspNet Core 3.1 中创建示例 API,但由于我使用的是 AdventureWorks (2019) 数据库,因此我不得不进行一些更改。
数据库上下文是这样搭建的。
public partial class AdventureWorks2019Context : DbContext
{
public AdventureWorks2019Context(){}
public AdventureWorks2019Context(DbContextOptions<AdventureWorks2019Context> options)
: base(options){}
.
.
.
public virtual DbSet<Person> Person { get; set; }
.
.
.
}
然后我在startup.cs中注册了这个上下文,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<AdventureWorks2019Context>(
options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
我还搭建了一个 People 控制器,但是当我尝试 GetPerson() 方法时它不起作用,我收到“SqlException: Invalid object name 'Person.Person'”错误消息。
[HttpGet]
public async Task<ActionResult<IEnumerable<Person>>> GetPerson()
{
return await _context.Person.ToListAsync(); //==> SqlException: Invalid object name 'Person.Person'.
}
这就是错误SqlException: Invalid object name 'Person.Person'。 但是当我这样做(如下)时,它会起作用。但是,我不想这样做,因为我会错过依赖注入的全部意义,就像我看到的那样。
[HttpGet]
public async Task<ActionResult<IEnumerable<Person>>> GetPerson()
{
AdventureWorks2019Context awc = new AdventureWorks2019Context();
return await awc.Person.ToListAsync();//==> Works fine
}
无论哪种情况,发送到 SQL Server 的都是这个,它工作正常。
SELECT [p].[BusinessEntityID],
[p].[AdditionalContactInfo],
[p].[Demographics],
[p].[EmailPromotion],
[p].[FirstName],
[p].[LastName],
[p].[MiddleName],
[p].[ModifiedDate],
[p].[NameStyle],
[p].[PersonType],
[p].[rowguid],
[p].[Suffix],
[p].[Title]
FROM [Person].[Person] AS [p]
我只是不知道这个错误来自哪里。提前致谢