C#EF Code first - init数据库(创建表)并启用迁移

时间:2017-07-31 02:52:01

标签: c# entity-framework ef-migrations

我正在将网络表单应用更新为mvc应用,但我遇到了问题。

当我第一次尝试通过webApp登录时,我想自动创建AspNetUsers表

错误消息下方:

  • 目标上下文'PROJECT.Data.DataContext'不可构造。 添加默认构造函数或提供实现 IDbContextFactory

  • 无法检查模型兼容性,因为数据库不包含模型元数据。只能检查模型兼容性 使用Code First或Code First Migrations创建的数据库。

第一个用以下代码解雇:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, MyConfiguration>());

    public class MyConfiguration : DbMigrationsConfiguration<DataContext>
    {
        public MyConfiguration()
        {
            this.AutomaticMigrationsEnabled = true;
        }

        protected override void Seed(DataContext context)
        {
            InitializeIdentityForEF(context);
            base.Seed(context);
        }

        public void InitializeIdentityForEF(DataContext db)
        {
           // create admin user with role and claims
        }
    }

第二个:

Database.SetInitializer(new ApplicationDbInitializer());

 public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<DataContext>
 {

      protected override void Seed(DataContext context)
      {
           InitializeIdentityForEF(context);
           base.Seed(context);
      }

      public void InitializeIdentityForEF(DataContext db)
      {
           // create admin user with role and claims
      }
}

我认为如果我通过控制台启用迁移,我可以解决此问题,但我想在代码中实现所有内容。有没有想过将上述两个代码混合在一起?

注意:我只想创建AspNetUser表,因为我在创建它时使用“Database First”。

public class DataContext : DbContext, IEntitiesContext
    {
        private static readonly object Lock = new object();
        private static bool _databaseInitialized;

        public DataContext(string nameOrConnectionString, ILogger logger) : base(nameOrConnectionString)
        {
            Database.Log = logger.Log;
            if (_databaseInitialized)
            {
                return;
            }
            lock (Lock)
            {
                if (!_databaseInitialized)
                {
                    Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, MyConfiguration>());
                    Database.SetInitializer(new ApplicationDbInitializer());
                    _databaseInitialized = true;
                }
            }
        }

0 个答案:

没有答案