Entity framework 代码第一次迁移-子类需要Id字段
我在VS 2013中有一个标准MVC 5项目,使用内置的身份提供者。我正在尝试根据自定义用户配置文件 我没有像本文中那样扩展ApplicationUser,因为我想在同一个解决方案中的另一个项目中进行扩展。我创建了一个新的子类ExtendeDeduser:Entity framework 代码第一次迁移-子类需要Id字段,entity-framework,ef-code-first,asp.net-identity,entity-framework-migrations,Entity Framework,Ef Code First,Asp.net Identity,Entity Framework Migrations,我在VS 2013中有一个标准MVC 5项目,使用内置的身份提供者。我正在尝试根据自定义用户配置文件 我没有像本文中那样扩展ApplicationUser,因为我想在同一个解决方案中的另一个项目中进行扩展。我创建了一个新的子类ExtendeDeduser: public class ExtendedUser : IdentityUser { [MaxLength(12)] public string PIN { get; set; } } 然后我有: public class
public class ExtendedUser : IdentityUser
{
[MaxLength(12)]
public string PIN { get; set; }
}
然后我有:
public class UsersContext : DbContext
{
public DbSet<ExtendedUser> ExtendedUsers { get; set; }
public UsersContext() : base() { }
public UsersContext(string ConnectionString) : base(ConnectionString) { }
}
public类用户上下文:DbContext
{
公共数据库集扩展控制器{get;set;}
公共用户上下文():base(){}
公共用户上下文(字符串连接字符串):基(连接字符串){}
}
在实例化和初始化UsersContext时,我会遇到以下问题:
用户代码未处理System.Data.Entity.ModelConfiguration.ModelValidationException
HResult=-2146233088
消息=在模型生成过程中检测到一个或多个验证错误:
IdentityUserLogin::EntityType“IdentityUserLogin”未定义键。定义此EntityType的键。
IdentityUserRole::EntityType“IdentityUserRole”未定义键。定义此EntityType的键。
IdentityUserLogins:EntityType:EntitySet“IdentityUserLogins”基于未定义键的类型“IdentityUserLogin”。
IdentityUserRoles:EntityType:EntitySet“IdentityUserRoles”基于未定义键的类型“IdentityUserRole”。
看起来其他身份成员表都更新了,但我没有碰任何一个。为什么会发生这种情况,我该如何纠正它。尝试将
IdentityDbContext
作为UsersContext
的基类,正如您在文章中提到的那样。没有它,您就没有任何代码行来告诉ef哪个属性是键。如果您不想要IdentityDbContext,您应该在方法void OnModelCreating(DbModelBuilder modelBuilder)
put属性映射中,例如:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ExtendedUser>().HasKey(t => t.Id);
...
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().HasKey(t=>t.Id);
...
}
我将其更改为公共类用户上下文:IdentityDbContext
。现在,在实例化UsersContext时,会发生InvalidOperationException:不支持每种类型有多个对象集。对象集“Extendeducers”和“Users”都可以包含“Extendeducer”类型的实例。我不理解有关“用户”的部分,因为您可以找到IdentityDbContext
将为您提供属性:public virtual IDbSet Users{get;set;}
。因此,使用public DbSet extendederators{get;set;}
您将在UsersContext
2中拥有IDbSet的属性-因此您应该删除extendederators并使用Users。