Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 代码第一次迁移-子类需要Id字段_Entity Framework_Ef Code First_Asp.net Identity_Entity Framework Migrations - Fatal编程技术网

Entity framework 代码第一次迁移-子类需要Id字段

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

我在VS 2013中有一个标准MVC 5项目,使用内置的身份提供者。我正在尝试根据自定义用户配置文件

我没有像本文中那样扩展ApplicationUser,因为我想在同一个解决方案中的另一个项目中进行扩展。我创建了一个新的子类ExtendeDeduser:

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。