首先我没有看到这个错误在其他地方,我想它不是一个重复,所以请首先阅读整个局势。
每一件事情是工作就好了,然后我试图更新我的模型类的一个 (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
在这里,我收集了所有你要注意,而且必须得到满足,以避免上述以外的所有条件/要求的言论:
- 你应该只使用一个版本的EntityFramework NuGet包为您的解决方案的所有项目。
- 作为你的目标数据库,并对应于实体模型数据库,通过运行顺序所有迁移脚本创建应具有相同的结构/架构。 以下3两件事必须完全对应/反映出/相互匹配:
- 您的所有迁移脚本截至去年
- 当前的代码第一个实体模型状态(的DbContext,实体)
- 目标数据库
- 目标数据库(MDF文件)应更新/对应到上一个迁移脚本。 验证在目标数据库“__MigrationHistory”表包含记录您拥有所有迁移脚本,它意味着所有的迁移脚本已成功应用到数据库中。 我建议你使用Visual Studio为对应于数据库,项目生成正确的代码第一实体和上下文 - >添加新项 - > ADO.NET实体数据模型 - >代码首先从数据库: 当然,作为一种替代,如果你没有数据库可手动编写模型(代码第一实体和上下文),然后产生初始迁移和数据库。
连接字符串如的名称在启动项目(Web.config文件/ app.config)中的配置文件MyConnectionString:
<configuration> <connectionStrings> <add name="MyConnectionString" connectionString="..."> </connectionStrings> <configuration>
应等于在你的DbContext的构造函数传递参数:
public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ...
- 使用软件包管理器控制台之前,请确保您使用的是正确的数据库进行更新或产生迁移,需要项目设置的解决方案启动项目。 对于连接到数据库,它将使用连接字符串从config文件,这在工程,即设置为启动项目。
和主,其中固定我的问题:这是不可思议的,但在我的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,提出请求,它创建正确的数据库 - 初始化工作(使用以上线路),对应于最新的迁移和异常没有出现更多。 所以,这可能会解决你的问题:
- 从启动项目手动删除斌,OBJ文件夹 (生成/更新数据库)
- 建立你的启动项目或更好的清洁和重建你的所有解决方案。
- 重新通过启动项目数据库(将执行上面的线)或使用程序包管理器控制台“更新数据库”命令。
- 手动检查是否产生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