我有 .NET 6 中的独立类库项目(没有 Web API/MVC 项目)的解决方案。我没有添加任何启动项目作为 Web API 或 MVC。我在该项目中添加了模型和数据库上下文类,如下所示。
public class Producer
{
[Key]
public int ProducerID { get; set; }
[Required]
[StringLength(254)]
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductID { get; set; }
public int ProducerID { get; set; }
[Required]
[StringLength(254)]
public string Name { get; set; }
public Producer Producer { get; set;}
}
在我的 DBContext 类中代码如下。
public class AppDbContext : DbContext
{
private readonly string _connectionString;
private readonly IConfiguration _iConfig;
public AppDbContext(DbContextOptions<AppDbContext> options, IConfiguration iConfig) : base(options) {
_connectionString = GetConnectionString(iConfig);
_iConfig = iConfig;
}
public static string GetConnectionString(IConfiguration iConfig)
{
var dataSource = iConfig["db:serverName"];
var port = iConfig["db:port"];
if (!string.IsNullOrWhiteSpace(port))
dataSource += "," + port;
SqlConnectionStringBuilder builder = new()
{
["Data Source"] = dataSource,
["Initial Catalog"] = iConfig["db:initialCatalog"],
["User ID"] = iConfig["db:userId"],
["Password"] = iConfig["db:password"]
};
return builder.ConnectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(_connectionString);
public DbSet<Producer> Producers { get; set; }
public DbSet<Product> Products { get; set; }
}
当我运行 add-migration 命令时,出现错误:
Unable to create an object of type 'AppDbContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728
方法 2 - 我使用控制台应用程序完成了相同的代码,以便我可以启动项目,但错误仍然相同。
我在这里缺少什么。提前致谢。
最佳答案
您只能将 IDesignTimeDbContextFactory
用于类库,并且应该安装 Microsoft.EntityFrameworkCore.Tools
来执行迁移命令。
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true");
return new AppDbContext(optionsBuilder.Options);
}
}
数据库上下文:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Product> Products { get; set; }
}
关于c# - 如何在类库项目中首先使用 EF Core Code 创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75111851/