最近在一个C#客户端中使用SQLite数据库,由于EF极为方便,所以用EF作为数据库操作方式。最初使用EF的Db First方式,可以在DbContext的构造函数里面传入拼接的字符串实现动态指定数据库路径。但后来由于种种原因转到了code frist方式,这时候发现用上面那种方式失效了。用反编译工具查看.net源码,发现在DbContext只能识别带有模型的连接字符串,无法动态指定普通的数据库连接字符串。网上搜索无结果。正在绝望的时候,无意间发现了一种方式。
public static SqliteContext CreateDb() { var result = SQLiteProviderFactory.Instance.CreateConnection(); result.ConnectionString = $"data source={Settings.Default.DbPath}"; return new SqliteContext(result); }
SQLite的EF包里面提供了一种创建DbConnection的方法
public class SqliteContext:DbContext { public SqliteContext(DbConnection connection) : base(connection, true) { }
于是构造一个DbContext并传入这个Connection。这是在查看DbContext构造函数时发现的一种方法。