12

股票 asp.net mvc 5 应用程序在单独的上下文中创建应用程序用户,也就是身份用户,命名一个名为“IdentityModels.cs”的文件 - 它看起来像这样

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
}

我试图将应用程序用户置于常规数据上下文中,即类似这样

 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 - 有人知道这样做的方法吗?所有文件都是最新的。

4

4 回答 4

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>();
        }
    }
于 2013-11-02T20:31:01.977 回答
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; }
}
于 2013-11-01T13:19:26.067 回答
2

确保您的 ApplicationUser 类继承自 IdentityUser。

然后您需要配置您的上下文,以便它正确映射所有 ASP.NET 标识类。这些是:

  1. ApplicationUser(你的班级)
  2. 身份用户声明
  3. 身份用户登录
  4. 身份用户角色
  5. 身份角色

此处发布的详细信息有点过于复杂,但我已经制作了一个示例项目,该项目适用于 ASP.NET Identity 的发布版本。你可以在这里看到它: https ://github.com/onybo/Asp.Net-Identity-sample-app/tree/master/CustomUser

于 2013-10-28T10:36:02.583 回答
0

我不确定这是否会对您有所帮助,或者我是否完全理解您的问题……但是如果您想尝试使用自己的“模型”,请更改:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("PUT IN YOUR MODEL CONN HERE")
    {
    }

我不知道您可以配置多少,或者这是否真的会改变上下文。

于 2013-10-28T06:18:52.653 回答