EFCore for SQLite
2021/03/29
第一步:安装 nuget 包
Microsoft.EntityFrameworkCore.Sqlite第二步:创建 DbContext
public class SQLiteDbContext : DbContext
{
public SQLiteDbContext()
{
Init();
}
private void Init()
{
try
{
// 在使用前确保数据库已被创建
this.Database.EnsureCreated();
}
catch (Exception ex)
{
// 进行异常处理
}
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// 从配置文件中读取数据库文件路径
var dbPath = GlobalConfig.CacheDbPath;
if (dbPath.IsNullOrWhiteSpace())
{
throw new ArgumentNullException(nameof(GlobalConfig.CacheDbPath), "CacheDbPath节点配置有误");
}
try
{
// 如果数据库文件是相对路径,则拼上完整路径
if (!File.Exists(dbPath))
{
dbPath = Path.Combine(AppContext.BaseDirectory, dbPath);
}
// 如果数据库文件夹不存在,则创建一个
var dbDir = Path.GetDirectoryName(dbPath);
if (!Directory.Exists(dbDir))
{
Directory.CreateDirectory(dbDir);
}
}
catch {
// 进行异常处理
}
optionsBuilder.UseSqlite($"Data Source={dbPath}");
}
}
配置文件中的节点如下:
{
"CacheDbPath": "data\\cache.mdf"
}
第三步:定义数据库实体类
需要注意的是,数据库实体类中的属性类型,只能是基础类型,即 System
命名空间下的类型,不能是其他自定义的类型或复合类型。不过,最新版好像可以使用自定义类型和复合类型了,感兴趣的话可以去试试。
public class CacheItem
{
public Int64 UserId { get; set; }
public String UserName { get; set; }
}
第四步:向 DbContext 中添加 DbSet
public class SQLiteDbContext : DbContext
{
...
public DbSet<CacheItem> CacheItems { get; set; }
...
}
第五步:调用
public void TestAdd()
{
using var db = new SQLiteDbContext();
db.CacheItems.Add(new CacheItem()
{
UserId = 1000,
UserName = "张三"
});
db.SaveChanges();
}