迁移中的错误:
PM> 启用迁移 检查上下文是否面向现有的 数据库。。。 System.Data.Entity.ModelConfiguration.ModelValidationException: One or 在模型生成过程中检测到更多验证错误:
AspNetRoles:名称:具有架构"dbo"和架构的实体集"AspNetRoles"和 表"AspNetRoles"已经定义。每个实体集必须引用 唯一的架构和表。
atSystem.Data.Entity.Core.Metadata.Edm.EdmModel.Validate() at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext 内部上下文) 在 System.Data.Entity.Internal.RetryLazy
2.GetValue(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
1.IsIdentityV1Schema(DbContext db) 在 Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext
at System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps() at System.Data.Entity.Database.Exists() at Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext1..ctor(String nameOrConnectionString, Boolean throwIfV1Schema) at Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext
1..ctor(String nameOrConnectionString) at Apk.Model.ApkEntities..ctor() in c:\Users\Administrator\Documents\Visual Studio 2013\项目\Apk\Apk.Data\ApkEntities.cs:line 10 --- 从引发异常的先前位置的堆栈跟踪结束 --- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Data.Entity.Infrastructure.DbContextInfo.CreateInstance() at System.Data.Entity.Infrastructure.DbContextInfo..ctor(类型 contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo, Func'1 resolver) at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistState 存在状态)在 System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration 配置)在 System.Data.Entity.Migrations.Design.MigrationScafffolder..ctor(DbMigrationsConfiguration 迁移配置) at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run() at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner 跑步者)在 System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldInitialCreate(String 语言,字符串根命名空间) at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0() 在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action 命令)在建模期间检测到一个或多个验证错误 代:AspNetRoles:名称:具有架构"dbo"和架构的实体集"AspNetRoles"和 表"AspNetRoles"已经定义。每个实体集必须引用 唯一的架构和表。
为什么会发生此错误?
我需要更改 IdentityRole 和 IdentityUser。
public class ApkEntities : IdentityDbContext<ApplicationUser>
{
public ApkEntities ()
: base("ApkEntities")
{
}
public virtual void Commit()
{
base.SaveChanges();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
modelBuilder.Configurations.Add(new AspNetRoleConfiguration());
modelBuilder.Configurations.Add(new AspNetUserConfiguration());
}
}
public class AspNetRoleConfiguration : EntityTypeConfiguration<ApplicationRole>
{
public AspNetRoleConfiguration(string schema = "dbo")
{
ToTable(schema + ".AspNetRoles");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("Id").IsRequired().HasMaxLength(128).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.Name).HasColumnName("Name").IsRequired().HasMaxLength(256);
Property(x => x.NameFa).HasColumnName("NameFa").IsRequired().HasMaxLength(50);
Property(x => x.Description).HasColumnName("Description").IsOptional().HasMaxLength(250);
Property(x => x.IsActivated).HasColumnName("IsActivated").IsRequired();
}
}
public class AspNetUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
public AspNetUserConfiguration(string schema = "dbo")
{
ToTable(schema + ".AspNetUsers");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("Id").IsRequired().HasMaxLength(128).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(x => x.Email).HasColumnName("Email").IsOptional().HasMaxLength(256);
Property(x => x.PhoneNumberConfirmed).HasColumnName("PhoneNumberConfirmed").IsOptional();
Property(x => x.FirstName).HasColumnName("FirstName").IsOptional();
Property(x => x.LastName).HasColumnName("LastName").IsOptional();
Property(x => x.DateCreated).HasColumnName("DateCreated").IsRequired();
Property(x => x.PasswordHash).HasColumnName("PasswordHash").IsOptional();
Property(x => x.SecurityStamp).HasColumnName("SecurityStamp").IsOptional();
Property(x => x.UserName).HasColumnName("UserName").IsRequired().HasMaxLength(256);
}
}
public class ApplicationRole : IdentityRole
{
public string Description { get; set; }
public string NameFa { get; set; }
public bool IsActivated { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
DateCreated = DateTime.Now;
LF_FavoraiteTeam = new Collection<LF_FavoraiteTeam>();
}
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? LastLoginTime { get; set; }
public bool? IsActivated { get; set; }
public virtual ICollection<LF_FavoraiteTeam> LF_FavoraiteTeam { get; set; }
}
尝试在 ApkEntities 上下文中显式定义 ApplicationUser 和 ApplicationRole DbSets,并删除 IdentityRole 和 IdentityUser 对象中已有的属性。这些已经通过从 IdentityDbContext 继承来定义。