a7m*_*dx7 84 .net linq asp.net-mvc entity-framework asp.net-mvc-5
一切都工作得很好,然后我尝试更新我的一个模型类(App类和更新现在留下评论),我将在下面列出并繁荣我有这个丑陋的错误.
自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改.请考虑使用"代码优先迁移"来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269).在System.Data.Entity.CreateDatabaseIfNotExists
1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.b__e()处于System.Data.Entity.InternalContext.PerformInitialization()的System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)中的System.Data.Entity.位于System.Data.Entity.Internal的文档1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action中的System.Data.Entity.Entity.Internal.OitityDatabase()的System.Data.EntityContext.b__4(InternalContext c)中的Internal.LazyInternalContext.b__4(InternalContext c).InternalContext.GetEntitySetAndBaseTypeForType(Type) System.Data.Entity.Internal.Linq.InternalSet中的1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet1.Include(String path)1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryableSystem.Data.Entity.QueryableExtensions.Include [T,System.Data.Entity.Infrastructure.DbQuery 1 source,String path)inInclude(String path)1 source, Expression在Microsoft.AspNet.Identity.UntityFramework.UserStore6.GetUserAggregateAsync(Expression上的Microsoft.AspNet.Identity.EntityFramework.UserStore6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager2.FindByNameAsync(String userName)的Microsoft.AspNet.Identity.UserManager`2.d__12上的TProperty](IQueryable 1路径). MoveNext()---来自先前locati的堆栈跟踪结束 在抛出异常的位置---在ControlPanel.Web.Controllers.AccountController.d__2.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)上在d:\ Projects\FULL\Control Panel\ControlPanel.Web\Controllers\AccountController.cs:第56行
起初我认为这可能是一个迁移问题,因此我完全删除了数据库,重新启用了迁移,并添加了Init迁移并使用了更新数据库
update-database -force -verbose
Run Code Online (Sandbox Code Playgroud)
每件事都没有投诉,但每当我尝试登录我的网站时,我都会收到上一个错误.我做了大约十次移植的事情而没能解决问题.
这是我的域类(模型):
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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的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");
}
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 137
以防万一其他人偶然发现像我这样的数据库第一次实现.
我通过扩展ApplicationUser类,向AspNetUsers表中添加一个新字段进行了更改,然后在启动时出现此错误.
我能够通过删除__MigrationHistory表中创建的记录来解决这个问题(那里只有一个记录)我假设EF决定我需要使用迁移工具更新我的数据库 - 但我自己已经手动完成了这个.
Dan*_*aan 73
这对我有用 - 无需其他更改.
DELETE FROM [dbo].[__MigrationHistory]
Run Code Online (Sandbox Code Playgroud)
a7m*_*dx7 11
这是一个奇怪的错误,这不是我最后的错误,它是微软的,我安装了实体框架的"预发布"版本,它负责这个错误,当我升级到稳定释放它消失,谢谢大家相信我,当我问这个问题我搜索了一个星期左右的解决方案所以我很确定这个问题不是其他地方:实体framework.dll的版本导致了问题是6.0.2,如果它有帮助.
Har*_*ari 11
每个人都对此错误感到头疼:确保所有projetcs都引用相同的Entity Framework程序集.
短篇小说:
我的模型和我的应用程序在不同的程序集中.这些程序集引用了不同版本的Entity框架.我猜这两个版本为同一个modell生成了不同的id.因此,当我的应用程序运行时,模型的id与__MigrationHistory中的最新迁移不匹配.更新所有对最新EF版本的引用后,错误再也没有出现过.
我花了很多天时间来解决这个问题,分析了许多不同的帖子并尝试了很多选项并最终修复了. 这2个项目在我的解决方案中使用EF代码首次迁移:
请求WebApi时出现此错误...
我的环境:
在这里,我收集了您应该注意的所有评论以及必须满足的所有条件/要求,以避免提到的异常:
当然,作为替代方案,如果您没有数据库,则可以手动编写模型(代码优先实体和上下文),然后生成初始迁移和数据库. 连接字符串的名称,例如启动项目的配置文件中的MyConnectionString(Web.config/App.config):
<configuration>
<connectionStrings>
<add name="MyConnectionString" connectionString="...">
</connectionStrings>
<configuration>
Run Code Online (Sandbox Code Playgroud)
应该等于在DbContext的构造函数中传递的参数:
public partial class MyDbContext : DbContext
{
public MyDbContext()
: base("name=MyConnectionString"){}
...
Run Code Online (Sandbox Code Playgroud)主要的,修复了我的问题:这很奇怪,但是在我的WebApi/bin文件夹中,DataModel.exe很旧,自上次构建以来没有刷新.由于迁移嵌入在我的程序集DataModel.exe中,因此我的WebApi使用旧镜像更新了数据库.我很困惑为什么在WebApi中更新数据库后,它不符合DataModel的最新迁移脚本.以下代码自动创建(如果不存在)或更新到WebApi/App_Data文件夹中的最新迁移本地数据库.
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>());
...
Run Code Online (Sandbox Code Playgroud)
我试过干净并重建解决方案,但它没有帮助,比我从WebApi完全删除bin和obj文件夹,从WebApi/App_Data删除数据库文件,构建,重新启动WebApi,向它发出请求,它创建了正确的数据库 - 延迟初始化(使用上面的行),它对应于最新的迁移和异常并没有出现更多. 所以,这可能会解决您的问题:
| 归档时间: |
|
| 查看次数: |
111539 次 |
| 最近记录: |