NP3*_*NP3 10 entity-framework-core asp.net-core
使用ASP.NET Core和EF Core,我正在尝试将迁移应用于数据库.但是,appsettings.json
应用程序将使用的连接字符串中的登录仅具有CRUD访问权限,因为安全性问题,因此无法创建表和列等.因此,当我运行时:
dotnet ef database update -c MyDbContextName -e Development
Run Code Online (Sandbox Code Playgroud)
我想告诉它使用不同的连接字符串,但我不知道是否可以这样做?基本上,我想使用两个不同的连接字符串,一个用于部署,另一个用于运行应用程序.这可能吗?有更好的方法吗?谢谢.
viv*_*una 20
在 EF Core 5.0 中,您将像这样在命令行中传递连接字符串,
dotnet ef database update --connection "connection string"
Run Code Online (Sandbox Code Playgroud)
参考: https : //docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew#new-command-line-parameters-for-namespaces-and-connection-字符串
保持两个字符串appsettings.json
.继承子上下文OnConfiguring
并appsettings.json
使用另一个连接字符串覆盖:
public class ScaffoldContext : MyDbContextName
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string scaffoldConnStr = ConfigurationManager.ConnectionStrings["scaffoldConnStr"].ConnectionString;
optionsBuilder.UseSqlServer(scaffoldConnStr);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
dotnet ef database update -c ScaffoldContext
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Package Manager Console
以下命令:
Update-Database -Connection "YOUR_CONNECTION_STRING"
小智 6
在 Linux 终端中:
export ASPNETCORE_ENVIRONMENT="Development"
dotnet ef database update
Run Code Online (Sandbox Code Playgroud)
其中 ASPNETCORE_ENVIRONMENT 与 appsettings.Development.json 匹配并正确配置连接字符串。
我喜欢脚手架 DbContext 的想法,但我发现了一些问题(我猜想以某种方式可以解决)以及关于在何处保留连接字符串的一些考虑。这些让我找到了另一个更粗糙的解决方案,所以我想我会在这里分享所有这些。
这是关于一般方法,以及随之而来的解决方案:
MyDbContextName
,而不是添加一个新的连接字符串。因此,可以通过这种方式克服整个脚手架数据库上下文。我在此过程中发现的其他问题:
初始 DbContext 将依赖项注入到构造函数中,因此子上下文必须相同。这使得dotnet ef
命令抱怨缺少无参数构造函数。
为了克服这个问题,在启动时也用.AddDbContext<ChildDbContext>(...)
. 这也需要 ChildDbContext 同时注入 aDbContextOptions<ParentDbContext>
和 a DbContextOptions<ChildDbContext>
。之后,dotnet-ef
仍然发现实例化 ChildDbContext 的问题,因为它还需要一个IConfiguration
无法找到的依赖项。也许(?)这是由于dotnet-ef
没有贯穿整个应用程序启动的事实。
正如我所说,我想这些问题毕竟可以解决,但我仍然怀疑脚手架上下文的真正价值,以防您不想将连接字符串保存在专用的 appsettings 文件中。一个相反的论点可能是您可能忘记了设置为远程连接字符串的环境变量,但您只需在完成迁移后立即关闭命令窗口。HTH
归档时间: |
|
查看次数: |
7465 次 |
最近记录: |