Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 未使用EF代码优先方法映射表_C#_.net_Entity Framework_Asp.net Identity_Code First - Fatal编程技术网

C# 未使用EF代码优先方法映射表

C# 未使用EF代码优先方法映射表,c#,.net,entity-framework,asp.net-identity,code-first,C#,.net,Entity Framework,Asp.net Identity,Code First,我想使用EF代码优先方法。我添加了数据库并生成了表。然后我加了这个类 public class Invitation { [Key] public int Id { get; set; } [DefaultValue(false)] public bool State { get; set; } public string Mail { get; set; } pub

我想使用
EF代码优先方法
。我添加了数据库并生成了表。然后我加了这个类

  public class Invitation
    {

      
        [Key]
        public int Id { get; set; }

        [DefaultValue(false)]
        public bool State { get; set; }

        public string Mail { get; set; }

        public string Tel { get; set; }

        public string Name { get; set; }

        public string Qr_code { get; set; }
  
    }
然后我运行以下命令:

第二次添加迁移

更新数据库

第二类迁移的
Up
Down
方法是空的!!并且没有表被添加到数据库中

上下文

 public class ApplicationContext: IdentityDbContext<ApplicationUser>
    {
         public ApplicationContext()
            :base("DefaultConnection")
        {
            Database.SetInitializer<ApplicationContext>(new CreateDatabaseIfNotExists<ApplicationContext>());
        }

        public static ApplicationContext Create()
        {
            return new ApplicationContext();
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
公共类应用程序上下文:IdentityDbContext
{
公共应用程序上下文()
:base(“默认连接”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
公共静态应用程序上下文创建()
{
返回新的ApplicationContext();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
}
}
所以我需要知道

  • 这个问题的原因是什么
  • 我怎样才能修好它

  • 看起来您忘记告诉Entity Framework您要添加的新表(
    DbSet

    添加此表后,Entity Framework应分别添加要添加到迁移脚本中的表

    总之,您需要添加以下行:

    public DbSet<Invitation> Invitations { get; set; }
    
    公共数据库集邀请{get;set;}
    
    和/或

    public IDbSet<Invitation> Invitations { get; set; }
    
    公共IDbSet邀请{get;set;}
    

    然后运行另一个迁移脚本。

    我认为您需要创建一个初始迁移。如果这是您的第一次迁移(请注意,这将清除您现有的迁移历史记录,因此仅在您愿意放弃现有迁移历史记录时使用)

  • 删除解决方案中的迁移文件夹
  • 删除更改(从
    DbContext
    中删除对新表的引用)。请注意,
    -IgnoreChanges
    很可能会使此步骤变得多余,但我不能确定
  • 从数据库中删除MigrationHistory表(它很可能不存在,但如果存在,您可以继续删除它)
  • 现在启用迁移(在package manager控制台中)

    然后创建您的初始迁移。这将创建一个使用空方法匹配现有模式的迁移

    Add-Migration Initial –IgnoreChanges
    Update-Database
    
    然后使用新的表引用更新
    DbContext
    ,并进行任何其他需要进行的更改

    Add-Migration MyChanges
    Update-Database
    

    这应该将更改应用到数据库。如果需要,可以添加一些。

    尝试将以下内容添加到ApplicationContext类中

    public DbSet<Invitation> Invitations { get; set; }
    

    我没有看到任何
    DbSet
    值…您忘记了一些代码吗?是的,
    DbSet
    值缺失。这就是Up()和Down()为空的原因。@MarkC。是的,我忘了在上下文中添加它,将您的评论作为一个提问者发布。或者,您可以添加一个更有意义的注释“AddDbSet”=固定OP的问题,他们说:
    我添加了数据库,并生成了表。。假设这已经完成,我不认为初始数据库创建实际上会创建迁移。我遇到了第一次迁移没有正确进行的问题(类似于空方法的症状),正如前面提到的那样,通过创建初始迁移解决了这个问题。话虽如此,问题似乎是您在本例中所说的缺少
    DbSet
    。我本来打算把我的答案留在这里,因为有点模棱两可,但我可以把它删掉。这会让问题变得复杂吗?真的吗?有什么例外吗?我认为你根本不应该删除它!很可能其他人也会遇到这种情况(只是不认为这个问题是这样的)是的,没有例外。给人一种工作的感觉,但就是没有感觉到任何变化。那我就把它放在这里,将来可能会帮助别人。
    public DbSet<Invitation> Invitations { get; set; }
    
    Enable-Migration
    Add-Migration note_of_changes
    Update-Database