我正在使用 Blazor、EF Core、NET 6、SQL Server。
我在 SQL Server LocalDB 中创建了一个数据库和一张表(数据库:
MyCompany
,表:SalaryTax_2023
)
SalaryTax_2023
根据每份工资有税金额。
我设置了一个
ApplicationDbContext.cs
和 Program.cs
、appsettings.json
以及所有(ApplicationDbContext 还没有任何 DbSet
)。
我创建了一个方法来获取带有用户输入变量的
salarytax
:
result = await dbContext
.SalaryTax_2023
.Where(row => row.min <= salary && salary < row.max)
.Select(row => new TaxResult { TaxAmount = row[columnIndex] })
.FirstOrDefaultAsync();
但我无法访问
SalaryTax_2023
。我可能尝试在没有DbSet
的情况下访问数据库。
据我所知,我可以使用它,因为它的表本身已经有模式和数据。我如何访问此案例?
我了解到migration &
update-database
命令用于EF Core和Blazor之间的同步。
我希望我能得到线索或回答如何解决这个问题。
您可以执行原始 SQL 查询来直接与表交互。这允许您执行 SQL 查询并将结果映射到 C# 对象。看看这个:
using var dbContext = new ApplicationDbContext();
var salary = 50000; // The salary you want to query for
var query = $"SELECT * FROM SalaryTax_2023 WHERE min <= {salary} AND max > {salary}";
var result = await
dbContext.SalaryTax_2023.FromSqlRaw(query).FirstOrDefaultAsync();
或者,您可以创建一个数据库集:
public DbSet<SalaryTax_2023> SalaryTax_2023 { get; set; }
此 DbSet 不需要迁移,因为它代表现有表
var result = await dbContext
.SalaryTax_2023
.Where(row => row.min <= salary && salary < row.max)
.Select(row => new TaxResult { TaxAmount = row[columnIndex] })
.FirstOrDefaultAsync();
希望这有帮助