Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AspNetCore应用程序中的SQLite数据上下文不工作_Sqlite_.net Core_Entity Framework Core - Fatal编程技术网

AspNetCore应用程序中的SQLite数据上下文不工作

AspNetCore应用程序中的SQLite数据上下文不工作,sqlite,.net-core,entity-framework-core,Sqlite,.net Core,Entity Framework Core,我一直在尝试在我的单页web应用程序中使用Visual Studio 2019和Entity Framework Core中最新的脚手架实现数据访问。我使用的是SDK版本3.1.100。所有内容都会生成并运行,但我收到一个运行时异常,声称“没有这样的表:用户”。这让我觉得efcore和数据库之间的连接很好。可能是其他原因,因为我在调试方面运气不太好。我的SQLite数据库文件和sqlite3.dll包含在项目中,其属性设置为“复制到输出”。相关代码部分如下所示: appsettings.json

我一直在尝试在我的单页web应用程序中使用Visual Studio 2019和Entity Framework Core中最新的脚手架实现数据访问。我使用的是SDK版本3.1.100。所有内容都会生成并运行,但我收到一个运行时异常,声称“没有这样的表:用户”。这让我觉得efcore和数据库之间的连接很好。可能是其他原因,因为我在调试方面运气不太好。我的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"))); 

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

错误提到找不到表
用户
,但数据库文件有表
数据用户

数据库上下文中属性的名称确定预期的表名。将其重命名为匹配,将数据库文件更改为匹配,或者使用fluent API在两者之间进行映射


更多信息可以在这里找到:

也尝试过这种方法。DatabaseContext中的DbSet User{}语句应该处理这个问题。应该创建一个映射回datUser的DatabaseContext属性吗?尝试了什么方法?我列出了三个选项。我尝试了公共DbSet datUser{get;set;}的DatabaseContext属性和foreach的控制器语句(这个.db.datUser中的var user)。错误是相同的,只是它指向的是datUser而不是user??我最好的猜测是您的Sqlite数据库不是您期望的位置。您的应用程序是否从与您打开的数据库相同的文件夹中运行?结果证明是正确的。Visual Studio正在将整个数据目录复制到输出。因此,当连接字符串更改为“Sqlite”:“Data Source=Data\\hopeap.db”时,我开始从数据表中获取数据。解决这个问题后,我发现了另一个问题:users.Append(user);语句不会将任何对象添加到列表中。。返回时,用户始终为空。修复方法是使用.Add(user)而不是Append。不知道为什么,但控制器现在正在从数据库返回数据。我不确定是否有礼仪来确保你得到信任,但谢谢你!
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;
  }
}
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'.