Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:在package manager控制台VS 2012中添加迁移时引发空引用异常_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 实体框架:在package manager控制台VS 2012中添加迁移时引发空引用异常

C# 实体框架:在package manager控制台VS 2012中添加迁移时引发空引用异常,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我一直在mvc项目中使用实体框架代码第一次迁移。但最近,在修改了模型类并添加了新的模型类之后,当我尝试在package manager控制台中使用add migration时,我不断遇到这样的错误:“对象引用未设置为对象的实例”,我使用的是实体框架版本5,当我尝试使用版本6时,它不会看到我的DbContext,这是我的堆栈跟踪,请每一个建议将受到欢迎 System.NullReferenceException: Object reference not set to an instance of

我一直在mvc项目中使用实体框架代码第一次迁移。但最近,在修改了模型类并添加了新的模型类之后,当我尝试在package manager控制台中使用add migration时,我不断遇到这样的错误:“对象引用未设置为对象的实例”,我使用的是
实体框架版本5
,当我尝试使用版本6时,它不会看到我的DbContext,这是我的堆栈跟踪,请每一个建议将受到欢迎

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure(EdmEntityType entityType, EdmModel model)
   at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities(EdmModel model)
   at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer)
   at System.Data.Entity.Migrations.Extensions.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter w)
   at System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(Action`1 writeXml)
   at System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
   at System.Data.Entity.Migrations.Design.ToolingFacade.GetPendingMigrationsRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Object reference not set to an instance of an object.
System.NullReferenceException:对象引用未设置为对象的实例。
位于System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure(EdmEntityType entityType,EdmModel模型)
位于System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities(EdmModel模型)
位于System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest,DbProviderInfo providerInfo)
位于System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
位于System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext上下文,XmlWriter编写器)
在System.Data.Entity.Migrations.Extensions.DbContextExtensions.c_uuDisplayClass1.b_uu0(XmlWriter w)中
位于System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(操作'1 writeXml)
位于System.Data.Entity.Migrations.Extensions.DbContextensions.GetModel(DbContext上下文)
位于System.Data.Entity.Migrations.DbMigrator..ctor(dbmigrations配置,DbContext用户上下文)
位于System.Data.Entity.Migrations.DbMigrator..ctor(dbmigrations配置)
位于System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()处
位于System.Data.Entity.Migrations.Design.ToolingFacade.GetPendingMigrationRunner.RunCore()处
位于System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()处
对象引用未设置为对象的实例。

您的复制中缺少一个片段,但我发现其他人报告了相同/类似的问题,因此我将使用他们的示例。这是报告:

public class Person
{
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<Meeting> Meeting { get; set; }
}

public class Meeting
{
    public int MeetingID { get; set; }

    [ForeignKey("Customer")]
    public int CustomerID { get; set; }

    public virtual Person Customer { get; set; }

    [ForeignKey("SalesAgent")]
    public int SalesAgentID { get; set; }

    public virtual Person SalesAgent { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }
    public DbSet<Meeting> Meetings { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Meeting>().HasRequired(m => m.Customer).WithMany(p => p.Meeting);
        modelBuilder.Entity<Meeting>().HasRequired(m => m.SalesAgent).WithMany(p => p.Meeting);
    }
}

class Program
{
    static void Main(string[] args)
    {
        using (var ctx = new MyContext())
        {
            EdmxWriter.WriteEdmx(ctx, XmlWriter.Create(Console.Out, new XmlWriterSettings { Indent = true }));
        }
    }
}
公共类人物
{
公共int PersonID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共虚拟ICollection会议{get;set;}
}
公开课
{
public int MeetingID{get;set;}
[外国钥匙(“客户”)]
public int CustomerID{get;set;}
公共虚拟人客户{get;set;}
[ForeignKey(“销售代理”)]
public int SalesAgentID{get;set;}
公共虚拟人销售代理{get;set;}
}
公共类MyContext:DbContext
{
公共数据库集人物{get;set;}
公共DbSet会议{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity().HasRequired(m=>m.SalesAgent).WithMany(p=>p.Meeting);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
使用(var ctx=new MyContext())
{
WriteEdmx(ctx,XmlWriter.Create(Console.Out,newxmlwritersettings{Indent=true}));
}
}
}
EF5中存在导致NullReferenceException的错误。由于另一个bug,这在EF6中也不起作用,但我相信这一切实际上都与此无关。我认为这里的意图是将Person实体中的一个导航属性映射到Meeting实体中的两个导航属性,EF不支持这一点(同样,您也无法通过查看Person.Meeting集合的内容来判断用户是作为客户还是作为销售代理参加会议)(或两者都有?)-您必须比较键值/引用-EF不这样做)。要解决此问题,需要按如下方式更改模型:

public class Person
{
    public int PersonID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<Meeting> MeetingsAsCustomer { get; set; }

    public virtual ICollection<Meeting> MeetingAsSalesAgent { get; set; }
}

public class Meeting
{
    public int MeetingID { get; set; }

    [ForeignKey("Customer")]
    public int CustomerID { get; set; }

    public virtual Person Customer { get; set; }

    [ForeignKey("SalesAgent")]
    public int SalesAgentID { get; set; }

    public virtual Person SalesAgent { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }
    public DbSet<Meeting> Meetings { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Meeting>().HasRequired(m => m.Customer).WithMany(p => p.MeetingsAsCustomer);
        modelBuilder.Entity<Meeting>().HasRequired(m => m.SalesAgent).WithMany(p => p.MeetingAsSalesAgent);

    }
公共类人物
{
公共int PersonID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共虚拟ICollection会议SasCustomer{get;set;}
公共虚拟ICollection MeetingAsSalesAgent{get;set;}
}
公开课
{
public int MeetingID{get;set;}
[外国钥匙(“客户”)]
public int CustomerID{get;set;}
公共虚拟人客户{get;set;}
[ForeignKey(“销售代理”)]
public int SalesAgentID{get;set;}
公共虚拟人销售代理{get;set;}
}
公共类MyContext:DbContext
{
公共数据库集人物{get;set;}
公共DbSet会议{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(m=>m.Customer)。带有多个(p=>p.MeetingsAsCustomer);
modelBuilder.Entity().HasRequired(m=>m.SalesAgent)。带有多个(p=>p.MeetingAsSalesAgent);
}

现在,我们在Person属性上有两个导航属性,它们映射到会议实体上相应的导航属性。

确保配置文件中的连接字符串存在并正确命名。我们是否可能获得内部异常?我觉得这是一个bug。您能报告(转到问题->新问题)吗?请在报告时包含复制。@VaughanHilts使用nuget console manager添加迁移时发生异常,它没有任何其他堆栈跟踪异常,如我上面给出的异常。抱歉@Pawel,复制是什么意思?非常模糊的错误。我从v6降级到v5,并且得到异常,不知道为什么。Thanks!