我正在尝试在UWP应用程序中包含一个SQLite文件。 SQLite文件中包含许多填充了数据的表。
数据库(至少现在)是只读的,我打算使用EF Core来访问数据。
所以我有两个问题:
将.sqlite文件的“复制到输出目录”设置为“始终复制”似乎将文件复制到bin文件夹,但我似乎无法找出访问它的路径。当将SQLite连接字符串设置为“Filename = databasename.sqlite”时 - 它似乎在其他地方创建了一个空白数据库文件,因为访问任何表的tryign会引发表未找到异常。
提前致谢!
答案 0 :(得分:4)
我的建议是......
我在MSDN论坛上回答了类似的问题。请参考。
答案 1 :(得分:0)
根据@Mamoru Satoh链接中的答案,对我有用的东西
在Assets文件夹中,我将数据库扩展名更改为.png,否则无法复制,然后在该目录中,数据库名称扩展名是.db
public async Task getDataBase()
{
StorageFile dbFile = (StorageFile) await ApplicationData.Current.LocalFolder.TryGetItemAsync("TestDb.db");
try
{
if (null == dbFile)
{
// first time ... copy the .db file from assets to local folder
var localFolder = ApplicationData.Current.LocalFolder;
var originalDbFileUri = new Uri("ms-appx:///Assets/TestDb.png");
var originalDbFile = await StorageFile.GetFileFromApplicationUriAsync(originalDbFileUri);
if (null != originalDbFile)
{
dbFile = await originalDbFile.CopyAsync(localFolder, "TestDb.db", NameCollisionOption.ReplaceExisting);
}
}
}
catch (Exception ex)
{
}
}
如果您将实体框架用于从Assets文件夹复制的数据库
public class Emp
{
[Key]
public int EmpID { get; set; }
public string EmpName { get; set; }
public int EmpDept { get; set; }
}
public class DataContext : DbContext
{
public DbSet<Emp> Employees { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=TestDb.db");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Emp>().ToTable("Emp");
}
}
启动应用程序时,您将需要运行getDataBase()函数
您可以使用相同的旧方法从数据库中查询
DataContext context = new DataContext();
string name = (await context.Employees.OrderBy(a => a.EmpName).FirstOrDefaultAsync()).EmpName;