作者:邱氏家族_玉辈 | 来源:互联网 | 2023-01-09 17:55
我有一个简单的问题,我有2层应用程序,一些前端和数据访问层,在不同的项目中.我通过数据访问层中的迁移在数据访问层中创建sqlite db,现在我想使用连接字符串,所以我在数据访问层创建上下文,如:
public class TodoDbContext : DbContext
{
public DbSet Activieties { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source=todo.db");
}
}
看起来很简单,db是在数据访问层项目中创建的.但是,当我运行前端项目程序正在寻找一个数据库,但在前端项目文件夹.我有checke通过添加:
var test = Directory.GetCurrentDirectory();
在上面的方法中.当我修改连接字符串到直接路径时:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source=C:\Users\Administrator\Desktop\TodoList\TodoDataAccess\todo.db");
}
它有效,所以我的问题是我可以做些什么来改变它?
1> Jacek Blaszc..:
要更轻松地访问您的应用数据,只需将其放入知名文件夹即可.根据您的应用程序名称,我假设您的应用程序是桌面应用程序,并将用户特定数据存储在SQLite DB中,该数据应该可以从不同的计算机访问.比DB的位置应确定为:
var sqlitePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
@"\todo.db");
这简化了所有应用程序数据管理,并使得所有计算机上的数据位置用户可能一直无视应用程序的安装方式.此外,这可以保证用户对DB文件夹具有完全访问权限.如果您的项目有其他功能要求,则应相应调整数据位置.
使用之前,我必须检查目录是否已创建。如果(!Directory.Exists(sqlitePath))Directory.CreateDirectory(sqlitePath); optionsBuilder.UseSqlite(“数据源=” + sqlitePath +“ \\ CtxName.db”);