更新1: 我确实有一个功能齐全的DbContext类/模型类
也:当我在DbContext中覆盖OnConfiguring时,好像不需要我的服务。AddDbContext
我的DbContext派生类:
namespace PersonHobbies.Models
{
public class DataBaseContext : DbContext
{
public DataBaseContext() {}
public DataBaseContext(DbContextOptions<DataBaseContext> options)
: base(options)
{
}
public virtual DbSet<Person> Person { get; set; }
public virtual DbSet<Hobby> Hobby { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=localhost;User Id=SA;password=<mypassword>;Database=TestDB;Trusted_Connection=False");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// nothing?
}
}
我的“人”模型班:
namespace PersonHobbies.Models {
public class Person {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
我的“爱好”模型班:
namespace PersonHobbies.Models {
public class Hobby {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
}
在我发现的示例中,它是在Startup类中完成的,例如:
namespace PersonHobbies
{
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetRequiredService<DataBaseContext>();
context.Database.EnsureCreated();
}
}
}
}
但是,当我尝试运行该程序时,出现异常。
类型为“ System.InvalidOperationException”的异常发生在 Microsoft.Extensions.DependencyInjection.Abstractions.dll,但不是 在用户代码中处理:“无类型服务 “ PersonHobbies.Models.DataBaseContext”已注册。”
我对这一切都是陌生的,但听起来这是错误的选择。我的基于DbContext的类(DataBaseContext)何时注册?
更新2:
使用OnConfiguring时,看起来应该像这样完成:
using (var context = new DataBaseContext())
{
context.Database.EnsureCreated();
}
我也没有例外,但是没有创建表