该模型支持的“ApplicationDbContext”语境已经改变,因为数据库创建该模型支持的“A

2019-06-17 10:22发布

首先我没有看到这个错误在其他地方,我想它不是一个重复,所以请首先阅读整个局势。

每一件事情是工作就好了,然后我试图更新我的模型类的一个 (App类和现在的更新是左评论),我将在下文上市热潮我有这个丑陋的错误。


该模型支持的“ApplicationDbContext”语境已经改变,因为该数据库已创建。 考虑使用代码首先迁移到更新数据库( http://go.microsoft.com/fwlink/?LinkId=238269 )。 在System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf 1.b__e()在System.Data.Entity.Internal.InternalContext.PerformInitializationAction(动作动作)在System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()在System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c)中在System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action在System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()在System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型的EntityType)在System.Data.Entity的1动作) .Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.Include(字符串路径)在System.Data.Entity.Infrastructure.DbQuery 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1种源,字符串路径)在System.Data.Entity.QueryableExtensions.Include [T,TProperty](IQueryable的1 source, Expression 1个路径)在Microsoft.AspNet.Identity.EntityFramework.UserStore 6.GetUserAggregateAsync(Expression 1个滤波器)中的Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager 2.FindByNameAsync(用户名字符串)在Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext()---从先前的位置堆栈跟踪其中的例外是在ControlPanel.Web.Controllers.AccountController抛出---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(工作任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(工作任务)结束.d__2.MoveNext()在d:\项目\ FULL \控制面板\ ControlPanel.Web \控制器\ AccountController.cs:线56

起初我以为这可能是一个迁移的问题,所以我放弃了数据库完全,重新启用了迁移,并增加了初始化迁移和更新使用数据库

update-database -force -verbose

每一件事情顺利的话没有任何怨言,但是每当我试图登录到我的网站,我得到了以前的错误。 我做了大约十次迁移的事情,而能够解决的问题。

这里是我的领域类(模型):

public class App
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int AppId { get; set; }
    //[Required]
    public virtual string FacebookId { get; set; }
    //[Required]
    public virtual string Secret { get; set; }      
    public virtual List<User> Users { get; set; }
    public virtual List<Post> Posts { get; set; }      
    //public virtual ApplicationUser Admin { get; set; }
}

public class Post
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int PostId { get; set; }
    public virtual string Content { get; set; }
    public virtual string Link { get; set; }
    public virtual string Image { get; set; }
    public virtual bool IsSpecial { get; set; }
    //[Required]
    public virtual App App { get; set; }
    //[Required]
    public virtual DateTime? PublishDate { get; set; }
}

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int UserId { get; set; }

    [MaxLength(500)]
    public virtual string FacebookId { get; set; }

    [MaxLength(500)]
    public virtual string Token { get; set; }

    //[Required]
    public virtual App App { get; set; }
}

这里是我的IdentityModels:

public class ApplicationUser : IdentityUser
{
    public virtual List<App> Apps { get; set; }
    public bool? IsPremium { get; set; }
    [DataType(DataType.Date)]
    public DateTime? LastPublishDateTime { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("dCon")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("Admins");
        modelBuilder.Entity<ApplicationUser>().ToTable("Admins");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AdminRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("Logins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("Claims");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles");
    }
}

Answer 1:

万一别人绊倒在这一点,在做一个数据库,第一个实现我一样。

我提出通过扩展的变化ApplicationUser类,添加一个新的领域的AspNetUsers表,然后对启动此错误。

我能够通过删除创建的记录来解决这个__MigrationHistory表(那里有一个记录)我认为EF决定,我需要使用迁移工具来更新我的数据库-但我已经手工完成这个自己。



Answer 2:

这为我工作 - 不再需要其他的变化。

DELETE FROM [dbo].[__MigrationHistory]


Answer 3:

这后固定我的问题。 这一切都将在下面一行Application_Start()Global.asax

Database.SetInitializer<Models.YourDbContext>(null);

然而,它会导致数据库娱乐为模型中的每个编辑,你可能会失去你的数据。



Answer 4:

它是这样一个奇怪的错误,,这不是我在最后的错误,这是微软的,,我装的是实体框架的“预发布版”,它是负责这个错误,,当我升级到稳定释放disapperared ,,谢谢大家相信我,当我问这个问题我搜索像一个星期左右,它的解决方案,所以我敢肯定,这个问题是不是其他任何地方:导致实体framework.dll版本问题是6.0.2如果它帮助。



Answer 5:

让每个人都从这个错误很头疼: 务必确保所有projetcs具有相同的实体框架集的引用。

短篇小说长:

我的模型和我的应用程序是在不同的组件。 这些组件被引用不同版本的实体框架。 我想这两个版本生成相同的型号名称不同的ID。 所以,当我的应用程序运行模型的ID不匹配__MigrationHistory最新迁移的一个。 更新所有引用最新的EF发布后的错误不会再出现了。



Answer 6:

如果您从“数据库>系统表”删除“[__MigrationHistory]”表,然后它会工作。



Answer 7:

我花了许多天来解决这个问题,分析许多不同的职位,尝试了很多选项, 最后固定。 这2个项目在我的解决方案使用EF代码首先迁移:

  • 控制台应用程序“的DataModel”这主要是利用作为其中包含我的所有代码第一实体的DbContext,Mirgations和通用仓库组装。 我已经包括了对这个项目单独空的本地数据库文件(在DataModel中/ App_Data文件夹中),才能生成包管理器控制台迁移。
  • 的WebAPI,其中引用的DataModel项目,并会使用的WebAPI / App_Data文件夹中的本地数据库文件,即不包含在项目

当被请求的WebAPI我得到这个错误...

我的环境:

  • Windows 8.1中的x64
  • 的Visual Studio 2015年专业与更新1
  • 我所有的项目针对的.NET Framework 4.6.1
  • 6.1.3的EntityFramework从的NuGet

在这里,我收集了所有你要注意,而且必须得到满足,以避免上述以外的所有条件/要求的言论:

  1. 你应该只使用一个版本的EntityFramework NuGet包为您的解决方案的所有项目。
  2. 作为你的目标数据库,并对应于实体模型数据库,通过运行顺序所有迁移脚本创建应具有相同的结构/架构。 以下3两件事必须完全对应/反映出/相互匹配:
    • 您的所有迁移脚本截至去年
    • 当前的代码第一个实体模型状态(的DbContext,实体)
    • 目标数据库
  3. 目标数据库(MDF文件)应更新/对应到上一个迁移脚本。 验证在目标数据库“__MigrationHistory”表包含记录您拥有所有迁移脚本,它意味着所有的迁移脚本已成功应用到数据库中。 我建议你使用Visual Studio为对应于数据库,项目生成正确的代码第一实体和上下文 - >添加新项 - > ADO.NET实体数据模型 - >代码首先从数据库: 当然,作为一种替代,如果你没有数据库可手动编写模型(代码第一实体和上下文),然后产生初始迁移和数据库。
  4. 连接字符串如的名称在启动项目(Web.config文件/ app.config)中的配置文件MyConnectionString:

     <configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration> 

    应等于在你的DbContext的构造函数传递参数:

      public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ... 
  5. 使用软件包管理器控制台之前,请确保您使用的是正确的数据库进行更新或产生迁移,需要项目设置的解决方案启动项目。 对于连接到数据库,它将使用连接字符串从config文件,这在工程,即设置为启动项目。
  6. 和主,其中固定我的问题:这是不可思议的,但在我的WebAPI / bin文件夹DataModel.exe老了,从去年的构建不会刷新。 由于迁移是嵌入在我的组装DataModel.exe然后我的WebAPI更新的数据库使用旧mirgations。 我很困惑,为什么在更新的WebAPI数据库之后,它不对应于从DataModel中最新的迁移脚本。 下面的代码会自动创建(如果不存在),或者在我的WebAPI / App_Data文件夹中更新最新的迁移本地数据库。

      public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); ... 

    我试图清理和重建解决方案,但它并没有帮助,比我完全去除bin和OBJ从的WebAPI的文件夹,从的WebAPI / App_Data文件删除的数据库文件,内置,重新启动的WebAPI,提出请求,它创建正确的数据库 - 初始化工作(使用以上线路),对应于最新的迁移和异常没有出现更多。 所以,这可能会解决你的问题:

    1. 从启动项目手动删除斌,OBJ文件夹 (生成/更新数据库)
    2. 建立你的启动项目或更好的清洁和重建你的所有解决方案。
    3. 重新通过启动项目数据库(将执行上面的线)或使用程序包管理器控制台“更新数据库”命令。
    4. 手动检查是否产生DB和__MirgationHistory对应于最新的迁移脚本。


Answer 8:

我有同样的问题,因为a7madx7,但与EF(V6.1.1)的稳定版本,发现分辨率发表于:

http://cybarlab.com/context-has-changed-since-the-database-was-created

在变化: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3

第二个环节包括具体提到了VB .....“你可以简单地添加所有正在就这样在Global.asax文件的app_start方法这个问题databasecontext”:

Database.SetInitializer(Of DatabaseContext)(Nothing)

注:我不得不更换“DatabaseContext”我的同班同学实施的DbContext的名字

更新:此外,使用codefirst方法时,连接到现有的表,检查数据库,看看是否EF创造了一个表“_migrationhistory”存储的映射。 我重新命名该表,则能够从Global.asax中移除SetInitializer。



Answer 9:

当您更改模型属性的数据标注可能发生这种情况。 例如:在添加[必需]对属性将导致在数据库设计挂起的更改。

最安全的解决方案是在包管理器控制台运行:

add-migration myMirgrationName

这将显示向上()方法的准确变化。 因此,你可以决定,如果你真的想申请通过这样的变化:

update-database

否则,你可能只是从__MigrationHistory表并从迁移文件夹中的解决方案资源管理器中删除最新的迁移。



Answer 10:

我只是通过删除网站文件夹中的所有文件解决了类似的问题,然后重新发布它。



Answer 11:

删除所有表认同

Delete _MigrationHistory
Delete AspNetRoles
Delete AspNetUserClaims
Delete AspNetUserLogins
Delete AspNetRoles
Delete AspNetUser


Answer 12:

从工具菜单,单击NuGet包管理器,然后单击程序包管理器控制台(PMC)。 请在PMC以下命令。

启用的迁移添加迁移初始化更新的数据库上运行应用程序。 该问题的解决方案就是从这里开始



Answer 13:

删除行中[__MigrationHistory表与旧的ProductVersion为我工作。 这个答案是对那些不想删除整个[__MigrationHistory表谁。 只是在列的ProductVersion旧版本删除行。 希望它可以帮助一些之一!



Answer 14:

当我发展,我更喜欢使用这个实用类配置迁移。

希望能帮助到你。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        this.Configuration.LazyLoadingEnabled = false;
    }

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

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

        Database.SetInitializer(new StackOverflowInitializer());
    }

    public class StackOverflowInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
    {
        public StackOverflowInitializer()
        {
            // TODO NOTHING, COMMENT ALL

            // IF CHANGES, RECREATE
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>());

            // CREATE ONLY NOT EXITS
            //Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
        }

    }

    public System.Data.Entity.DbSet<stackoverflow.Models.Company> Companies { get; set; }

}


Answer 15:

下面是相似类型的错误我遇到

该模型支持的“PsnlContext”语境已经改变,因为该数据库已创建。 考虑使用代码首先迁移到更新数据库( http://go.microsoft.com/fwlink/?LinkId=238269 )。

我加在Global.asax的应用程序启动事件解决错误的下面部分

database.setınitializ是(空);

这解决了该问题



Answer 16:

只是删除_MigrationHistory迁移历史记录在数据库中。 它的工作对我来说



Answer 17:

简单的错误意味着你的模型具有变化和不同步与DB,所以去包管理器控制台, add-migration foo2这会给什么原因造成的问题的提示,可能是你删除的东西还是在我的情况我删除数据注释。 从那里你可以得到改变,希望扭转它在你的模型。

之后删除foo2的。



Answer 18:

删除现有数据库,创建具有相同名称的新的数据库,所有数据复制...它会工作



Answer 19:

下面添加行“的Application_Start”中的“Global.asax.cs中”内

Database.SetInitializer<YourDbContext>(new DropCreateDatabaseIfModelChanges<YourDbContext>());


文章来源: The model backing the 'ApplicationDbContext' context has changed since the database was created