AspNetCore应用中的SQLite数据上下文不起作用

时间:2019-12-05 04:13:36

标签: sqlite .net-core entity-framework-core

我一直在尝试使用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的屏幕截图:

enter image description here

错误:

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'.

有什么想法或调试建议吗?我还能提供更多信息吗?

1 个答案:

答案 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