如果连接字符串在代码端,如何更新实体模型



我正在使用EF,在我的web配置中,我在第一次添加模型后删除了Connection字符串。现在看起来是这样的:

<connectionStrings> </connectionStrings>

我修改了Model.context.cs文件,在实体构造函数中添加了一个参数。以下是代码:

public QMatchServerEntities(string connectionString)
: base(connectionString)
{
}

当我建立连接并创建实体的对象时,我会在参数中发送整个连接字符串。我使用这种情况是因为客户端要求在代码中加密DB密码。

Model.QMatchServerEntities qMatch = new Model.QMatchServerEntities("Connection string")

我想知道的是,在这之后,当我更新模型时,它要求我首先创建新的连接,因为EF无法在web配置中找到该模型的连接字符串。有什么办法解决这个问题吗?

谢谢。

您需要指示DBContext使用该提供的连接字符串,因此您的代码应该覆盖OnConfiguring(…(方法,如下所示:

public class ApplicationDbContext : DbContext
{
private readonly string _connectionString;
public ApplicationDbContext(string connectionString)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}

您可以在此处找到更多信息:https://learn.microsoft.com/en-us/ef/core/dbcontext-configuration/

您可以在web应用程序启动期间实现数据库的迁移。我猜你在用。NET 6。

首先,在您的项目中创建一个名为DbInitializer.cs的新类,如下所示:

using Microsoft.EntityFrameworkCore;
namespace YouAppNamespace.Data
{
public static class DbInitializer
{
public static void Initialize(ApplicationDbContext ctx)
{
// used this for ensure database is created and for appy all migrations at runtime
ctx.Database.Migrate();
}
}
}

之后,在Program.cs文件中添加";添加此部分":

app.UseAuthentication();
app.UseAuthorization();
// Add this part
var serviceScope = app.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
var ctx = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
DbInitializer.Initialize(ctx);
ctx.Dispose();
serviceScope.Dispose();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();

不要忘记添加依赖项。告诉我它是否有效。

最新更新