我正在将网络表单应用更新为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;
}
}
}