终于找到一个方法可以使用EF的时候动态指定数据库路径了

最近在一个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构造函数时发现的一种方法。

你可能感兴趣的:(终于找到一个方法可以使用EF的时候动态指定数据库路径了)