【发布时间】:2023-03-05 04:07:01
【问题描述】:
我使用 NInject 容器进行依赖注入和实体框架核心作为 ORM。设置如下:
数据库上下文类
public TarantoContext()
{
}
public TarantoContext(DbContextOptions<TarantoContext> options)
: base(options)
{
}
public virtual DbSet<FileData> FileData { get; set; }
public virtual DbSet<FileExport> FileExport { get; set; }
public virtual DbSet<FileStatus> FileStatus { get; set; }
public virtual DbSet<FileType> FileType { get; set; }
public static string ConnectionString { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(ConnectionString);
}
}
程序.cs
TarantoContext.ConnectionString = configurationManager.DatabaseConnection;
我正在从 json 读取配置并将其传递给 DataAccess 层(传递给上下文类)。我的数据库中有几个表,并采用数据库优先的方法创建了必要的数据模型并完成了 dbcontext 类代码。我能够毫无问题地获取数据。现在我想添加迁移(我可能对现有表进行更多更改并可能创建新表)并在包管理器控制台中运行以下内容:
Add-Migration InitialCreate
由于connectionstring属性为空而导致以下错误
我可以通过硬编码 OnConfiguring 方法中的连接字符串来解决这个问题,我已经尝试过没有任何问题:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
// The connection string needs to exist in the migration project for the purpose of migrations. Comment it in production.
optionsBuilder.UseSqlServer(
"Data Source=temp;Initial Catalog=Demo;Persist Security Info=True;User ID=temp;Password=temp;MultipleActiveResultSets=True;");
//optionsBuilder.UseSqlServer(ConnectionString);
}
}
但我认为这不是进行迁移的正确方法。此外,如果我无法在 Program.cs 或 dbcontext 类之外设置连接字符串,我不确定如何处理产品中的迁移。我感兴趣的是学习其他开发人员用来处理这种情况的任何设计模式。非常感谢任何建议。
【问题讨论】:
标签: .net-core ef-core-2.0