股票asp.net mvc 5应用程序创建应用程序用户,即在单独的上下文中的身份用户,命名为名为“IdentityModels.cs”的文件 - 它看起来像这样
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
}
我正在尝试将Application用户放在常规数据上下文中,例如这样的
public class BlogProphetContext : DbContext
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Answer> Answers { get; set; }
public DbSet<Question> Questions { get; set; }
public DbSet<Tag> Tags { get; set; }
}
但是,每次我这样做时,每次尝试创建帐户时都会出现以下错误
The UserId field is required
当我尝试执行以下代码行时,在AccountController.cs中
result = await UserManager.AddLoginAsync(user.Id, info.Login);
我觉得我的方法是错误的,并且我没有在没有某种外部诡计的主数据上下文文件中使用ApplicationUsers - 有没有人知道某种方法来做到这一点?所有文件都是最新的。
答案 0 :(得分:11)
这有点太容易了 - 事实证明你只需要删除
<ApplicationUser>
当你调用上下文时,一切都如你所料(即MVC假设和开发人员假设(在本例中为我的)同步。
这是正常工作
public class MyContext : IdentityDbContext
{
public MyContext()
: base("DefaultConnection")
{
}
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<Answer> Answers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
}
答案 1 :(得分:3)
在这种情况下,如果您不希望ApplicationUser与asp.net Identity相关联,最简单的方法就是从applicationUser类中删除继承。
从ApplicationUser:IdentityUser转到ApplicationUser,然后在该类中创建一个Id属性。
然后你不必使用IdentityDBContext。
当然你必须完全重写AccountController,或者去掉它。你无法使用UserManager作为链接到IdentityUser的那个
然后,如果您正在使用EF,那么显然要确保添加迁移/更新数据库。
如果您确实希望保持帐户控制器不变并保留IdentityDbContext但添加其他实体,那么这很简单,只需执行以下操作:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection")
{
}
public DbSet<Dept> Dept{ get; set; }
public DbSet<Course> Course{ get; set; }
public DbSet<Etc> Etc{ get; set; }
}
答案 2 :(得分:2)
确保您的ApplicationUser类继承自IdentityUser。
然后,您需要配置上下文,以便正确映射所有ASP.NET Identity类。 这些是:
此处的详细信息有点过于复杂,无法在此处发布,但我已经制作了一个与ASP.NET Identity的发行版一起使用的示例项目。你可以在这里看到它: https://github.com/onybo/Asp.Net-Identity-sample-app/tree/master/CustomUser
答案 3 :(得分:0)
我不确定这是否会对您有所帮助,或者我是否完全理解您的问题...但如果您想尝试使用自己的“模型”,请更改:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("PUT IN YOUR MODEL CONN HERE")
{
}
我不知道您可以配置多少,或者这是否真的会改变上下文。