我一直在尝试使用Visual Studio 2019和Entity Framework Core中的最新支架在单页Web应用程序中实现数据访问。我正在使用SDK版本3.1.100。一切都构建并运行,但是我遇到了一个运行时异常,声明“没有这样的表:User”。这使我认为EF核心与数据库之间的连接良好。可能还有其他事情,因为我在调试方面没有太多运气。我的SQLite数据库文件和sqlite3.dll包含在项目中,并且具有设置为复制到输出的属性。相关代码部分如下:
appsettings.json:
{
"ConnectionStrings": {
"Sqlite": "Data Source=HopeApp.db"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
以下内容已添加到Startup.cs中的ConfigureServices:
services.AddEntityFrameworkSqlite()
.AddDbContext<DatabaseContext>(options =>
options.UseSqlite(Configuration.GetConnectionString("Sqlite")));
数据库上下文:
public class DatabaseContext: DbContext
{
public DbSet<datUser> User { get; set; }
public DbSet<datIESum> IESum { get; set; }
//
// https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
//
public DatabaseContext(DbContextOptions<DatabaseContext> options)
: base(options) { }
}
最后,尝试检索数据的控制器:
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{
private readonly DatabaseContext db;
public UserController(DatabaseContext db)
{
this.db = db;
}
[HttpGet]
public IEnumerable<datUser> Get()
{
List<datUser> users = new List<datUser>();
using (this.db)
{
foreach (var user in this.db.User)
{
users.Append(user);
}
}
return users;
}
}
我检查了DB Brower中的SQLite .db文件,并查看表是否存在并验证数据是否存在。我已经检查了文件权限,因此每个人都可以完全控制。我不知道还有什么要检查的。请注意,目前大多数示例都是以“代码优先”而不是“数据库优先”的方式提供的,这对我的应用程序更好。
以下是HopeApp.db的屏幕截图:
错误:
An exception of type 'Microsoft.Data.Sqlite.SqliteException' occurred in
Microsoft.EntityFrameworkCore.Relational.dll but was not handled in user code
SQLite Error 1: 'no such table: User'.
有什么想法或调试建议吗?我还能提供更多信息吗?
答案 0 :(得分:0)
该错误提到找不到表Course::whereIn('semester_id', $semesters)->where('semester_id', $semesters)->get();
,但数据库文件具有表User
。
数据库上下文中的属性名称确定期望的表名称。重命名它以匹配,更改数据库文件以匹配或使用流畅的API在两者之间进行映射。
更多信息可以在这里找到:https://docs.microsoft.com/en-us/ef/core/modeling/relational/tables