C# 实体框架启用迁移空引用异常

C# 实体框架启用迁移空引用异常,c#,.net,entity-framework,visual-studio-2012,entity-framework-migrations,C#,.net,Entity Framework,Visual Studio 2012,Entity Framework Migrations,我无法使代码优先迁移在我的Visual Studio 2013项目上正常工作。我使用的是EF 6.1和C#Net 4.5。当我尝试运行启用迁移或启用迁移-ContextTypeName DataContext时,出现以下错误: PM> Enable-Migrations -ContextTypeName DataContext -Force Checking if the context targets an existing database... System.NullReferenc

我无法使代码优先迁移在我的Visual Studio 2013项目上正常工作。我使用的是EF 6.1和C#Net 4.5。当我尝试运行
启用迁移
启用迁移-ContextTypeName DataContext
时,出现以下错误:

PM> Enable-Migrations -ContextTypeName DataContext -Force
Checking if the context targets an existing database...
System.NullReferenceException: Object reference not set to an instance of an object.
   at Infrastructure.DataAccess.DataContext..ctor() in c:\Users\mblack\Documents\Visual Studio 2013\Projects\BluemoonApp\Infrastructure\DataAccess\DataContext.cs:line 16
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance()
   at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo, Func1 resolver)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
   at System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(String language, String rootNamespace)
   at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Object reference not set to an instance of an object.
PM>启用迁移-ContextTypeName数据上下文-Force
正在检查上下文是否以现有数据库为目标。。。
System.NullReferenceException:对象引用未设置为对象的实例。
位于c:\Users\mblack\Documents\Visual Studio 2013\Projects\BluemoonApp\Infrastructure\DataAccess\DataContext.cs中的Infrastructure.DataAccess.DataContext..ctor():第16行
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
位于System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance()处
位于System.Data.Entity.Infrastructure.DbContextInfo..ctor(类型contextType、DbProviderInfo modelProviderInfo、AppConfig配置、DbConnectionInfo connectionInfo、Func1解析程序)
位于System.Data.Entity.Migrations.Dbmigator..ctor(DbMigrationsConfiguration配置、DbContext usersContext、DatabaseExistenceEstate ExistenceEstate、称为DbyCreateDatabase的布尔值)
位于System.Data.Entity.Migrations.DbMigrator..ctor(dbmigrations配置)
位于System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration MigrationConfiguration)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run()处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
在System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)处
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner)
位于System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(字符串语言,字符串根命名空间)
在System.Data.Entity.Migrations.EnableMigrationsCommand.c__DisplayClass2.b__0()中
位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)
对象引用未设置为对象的实例。
我不明白为什么这行不通。我曾尝试通过Nuget Package Manager控制台重新安装EntityFramework,并删除了Migrations文件夹,然后尝试“重新启用”迁移

如果您需要任何其他信息,请告诉我,谢谢

编辑:添加DataContext.cs和DataContextInitializer.cs

namespace Infrastructure.DataAccess
{
    public class DataContext : DbContext
    {
        public DataContext()
            : base(ConfigurationManager.ConnectionStrings["BluemoonDev"].ConnectionString)
        {
            Configuration.ProxyCreationEnabled = false;
        }

        public virtual DbSet<Task> Tasks { get; set; }
        public virtual DbSet<Test> Tests { get; set; }
        public virtual DbSet<Core.Models.Configuration> Configurations { get; set; }
        public virtual DbSet<Subscriber> Subscribers { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<Task>().HasKey(t => t.TaskId);


            base.OnModelCreating(modelBuilder);
        }
    }
}

namespace Infrastructure.DataAccess
{
    public class DataContextInitializer : DropCreateDatabaseIfModelChanges<DataContext>
    {
        protected override void Seed(DataContext context)
        {
            // . . . Creating lists for each Entity
            // . . . Adding those items to context and saving changes
        }
    }
}
namespace Infrastructure.DataAccess
{
公共类DataContext:DbContext
{
公共数据上下文()
:base(ConfigurationManager.ConnectionString[“BluemoonDev”].ConnectionString)
{
Configuration.ProxyCreationEnabled=false;
}
公共虚拟数据库集任务{get;set;}
公共虚拟数据库集测试{get;set;}
公共虚拟数据库集配置{get;set;}
公共虚拟数据库集订阅服务器{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//modelBuilder.Entity().HasKey(t=>t.TaskId);
基于模型创建(modelBuilder);
}
}
}
命名空间基础结构.DataAccess
{
公共类DataContextInitializer:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(DataContext上下文)
{
//…为每个实体创建列表
//…将这些项目添加到上下文并保存更改
}
}
}

如果要使用迁移,则需要将初始值设定项更改为MigrateDatabaseToLatestVersion或NullDatabaseInitializer

问题是您需要在上下文的构造函数中设置连接字符串。

我面临这种类型的问题
可能是您正试图为数据库中的列导入空值。但该字段不接受空值。

如果选择了单个启动项目,请签入解决方案属性。

package manager控制台下拉列表是否指向具有上下文的项目?是,它的默认项目是Infrastructure,我的DataContext.cs文件在Infrastructure.DataAccess中。您的数据上下文和初始值设定项是什么样子的?它们已编辑到Post中。这不是您问题的答案,但您可以使用名称,而不是从
ConfigurationManager
获取连接字符串。例如,
base(“BluemoonDev”)
当我尝试运行
启用迁移
命令时,它仍然失败(我正在使用
NullDatabaseInitializer
)。我甚至看不到迁移的具体需要,但我的上下文工作不正常,所以我想尝试一下。好的,如果这不起作用,我会考虑更高层次的问题,比如配置。按照jrummell的建议,尝试将您的ctor更改为base(“BluemoonDev”)。此外,请检查DropCreate的权限。这是SQL Server还是LocalDb?您在与迁移无关的上下文中遇到了哪些问题?目前我遇到了一系列问题,其中之一是权限不足,无法运行
创建数据库
查询。我正在想办法