在EF Core中在Sqlite或SqlServer之间切换的一般方法?

时间:2018-12-07 11:43:31

标签: sql-server asp.net-core entity-framework-core system.data.sqlite

我希望能够在使用SQLite和SqlServer作为ASP.NET Core应用程序中Entity Framework的db提供程序之间进行实时切换。

DbContext与数据库提供程序相关联的通常模式是通过ConfigureServices方法中的代码进行

        services.AddDbContext<FeedbackDbContext>(options => options.UseSqlite(Configuration.GetConnectionString("Feedback")));

每个EF Core数据库提供程序都将自己的扩展方法添加为Use<Provider>

令我惊讶的是,我找不到在config中为连接字符串指定数据库提供程序的方法

3 个答案:

答案 0 :(得分:1)

非常好的文章,展示了如何具有两个上下文,每个DbProvider一个,并且还能够生成不同的迁移:

https://jasonwatmore.com/post/2020/01/03/aspnet-core-ef-core-migrations-for-multiple-databases-sqlite-and-sql-server

答案 1 :(得分:0)

如果您使用相同的连接,则可以更改数据库名称。我认为您需要关闭,更改然后重新打开。我自己还没有尝试过。

this.Database.GetDbConnection().ChangeDatabase("DB name");

否则,您可以更改要使用的连接字符串。

this.Database.GetDbConnection().ConnectionString = "new connection string";

我使用一个单独的部分文件来保存我自己的任何代码,以防止系统在任何数据库重建时覆盖。您可以添加方法或属性来更改当前连接字符串。同样,您可能需要关闭,更改并重新打开

public partial class YourDbContext : DbContext
{
    void SetConnection(string s)

答案 2 :(得分:0)

您应该可以更改:

来自:

services.AddDbContext<FeedbackDbContext>(
    options => options.UseSqlite(Configuration.GetConnectionString("Feedback")));

收件人:

services.AddDbContext<FeedbackDbContext>(
    options => options.UseSqlServer(Configuration.GetConnectionString("Feedback")));