在数据库中自动生成表的正确/最佳方法是什么?

时间:2019-08-20 19:38:17

标签: c# .net-core entity-framework-core

更新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,但不是   在用户代码中处理:“无类型服务   “ PersonH​​obbies.Models.DataBaseContext”已注册。”

我对这一切都是陌生的,但听起来这是错误的选择。我的基于DbContext的类(DataBaseContext)何时注册?

更新2:

使用OnConfiguring时,看起来应该像这样完成:

using (var context = new DataBaseContext())
{
    context.Database.EnsureCreated();
}

我也没有例外,但是没有创建表

0 个答案:

没有答案