Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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
C# Sqlite-不存在这样的表,即使它存在?_C#_.net Core_Entity Framework Core - Fatal编程技术网

C# Sqlite-不存在这样的表,即使它存在?

C# Sqlite-不存在这样的表,即使它存在?,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,你好 我们目前正在进行一个需要本地存储数据(更具体地说是配置数据)的项目,并且认为Sqlite目前是一个不错的解决方案 但是,在设置DBContext、Entities和诸如此类的内容、创建迁移并运行Update Database来创建数据库(并通过DB Browser for SQLite确认它“正确”创建了数据库)之后,我们遇到了“找不到这样的表”错误 DataService.cs private SettingsModel GetConfig() { using(v

你好

我们目前正在进行一个需要本地存储数据(更具体地说是配置数据)的项目,并且认为Sqlite目前是一个不错的解决方案

但是,在设置DBContext、Entities和诸如此类的内容、创建迁移并运行
Update Database
来创建数据库(并通过
DB Browser for SQLite
确认它“正确”创建了数据库)之后,我们遇到了“找不到这样的表”错误

DataService.cs

private SettingsModel GetConfig()
    {
        using(var _context = new DataContext())
        {
            var query = (from a in _context.SettingsModel
                         select a);

            var obj = query.FirstOrDefault();
            if (string.IsNullOrWhiteSpace(obj.ExpressionString))
                obj.ExpressionString = DEFAULT_EXPRESSION_STRING;

            return obj;
        }
    }
public class DataContext : DbContext
{
    public virtual DbSet<SettingsModel> SettingsModel { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlite("Data source=keyconfig.db");
        }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SettingsModel>(entity =>
        {
            entity.HasNoKey();
            entity.Property(e => e.ExpressionString)
                .IsUnicode(false);
        });
    }
}
public class SettingsModel
{
    public string ExpressionString { get; set; }
}
DbContext.cs

private SettingsModel GetConfig()
    {
        using(var _context = new DataContext())
        {
            var query = (from a in _context.SettingsModel
                         select a);

            var obj = query.FirstOrDefault();
            if (string.IsNullOrWhiteSpace(obj.ExpressionString))
                obj.ExpressionString = DEFAULT_EXPRESSION_STRING;

            return obj;
        }
    }
public class DataContext : DbContext
{
    public virtual DbSet<SettingsModel> SettingsModel { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlite("Data source=keyconfig.db");
        }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SettingsModel>(entity =>
        {
            entity.HasNoKey();
            entity.Property(e => e.ExpressionString)
                .IsUnicode(false);
        });
    }
}
public class SettingsModel
{
    public string ExpressionString { get; set; }
}

老实说,我很傻,为什么这不起作用(或者为什么我们有问题),特别是在确认数据库及其表确实存在之后,所以任何和所有的帮助都将不胜感激

临时修复方法是使用.SQLITE数据库的绝对路径,而不是相对路径。稍后将再次查看/排除故障。

临时解决方案是使用.SQLITE数据库的绝对路径,而不是相对路径。稍后将再次查看/排除故障。

您确定数据库是在运行的应用程序查找的位置创建的吗?请检查
\u context.database.GetDbConnection().ConnectionString
,它是否指向包含该表的现有数据库?@IvanStoev感谢您的关注!显然,它对表没有主键这一事实并不满意,这也是有道理的。谢谢@事实上,我似乎有点过于乐观了。错误依然存在。至于连接字符串,这就是您在上面的代码段中看到的(
optionsBuilder.UseSqlite(…)
)。也许需要某种绝对路径?@IvanStoev好的,就像我怀疑的那样,我们似乎需要一个给定的绝对路径(目前)你确定数据库是在运行的应用程序查找它的地方创建的吗?检查
\u context.database.GetDbConnection().ConnectionString
,它是否指向包含该表的现有数据库?@IvanStoev感谢您的关注!显然,它对表没有主键这一事实并不满意,这也是有道理的。谢谢@事实上,我似乎有点过于乐观了。错误依然存在。至于连接字符串,这就是您在上面的代码段中看到的(
optionsBuilder.UseSqlite(…)
)。也许需要某种绝对的沐浴?@IvanStoev好吧,就像我怀疑的那样,我们似乎需要一条绝对的路径(目前)