C# Sqlite-不存在这样的表,即使它存在?
你好 我们目前正在进行一个需要本地存储数据(更具体地说是配置数据)的项目,并且认为Sqlite目前是一个不错的解决方案 但是,在设置DBContext、Entities和诸如此类的内容、创建迁移并运行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
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好吧,就像我怀疑的那样,我们似乎需要一条绝对的路径(目前)