EFCore for SQLite

第一步:安装 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();
}
Tags: ef efcore sqlite