创建与AspNetUsers的关系到其他表

时间:2018-01-10 02:28:17

标签: c# asp.net-mvc asp.net-identity relationship

我在AspNetUsers表中添加了一个OrganisationId字段,该表是来自组织表的ForeignKey。当我显示用户列表时,我需要在表格显示中添加一个列组织名称。

这是IdentityModels

using C2T.Model;

namespace C2T.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit https://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {
        public int OrganisationId { get; set; }
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
        public string Firstname { get; set; }
        public string Lastname { get; set; }
        public virtual Organisation Organisations { get; set; }
    }

    public class ApplicationRole : IdentityRole
    {
        public ApplicationRole() : base() { }
        public ApplicationRole(string name) : base(name) { }
        public string Description { get; set; }

    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }

        public System.Data.Entity.DbSet<C2T.Models.ApplicationRole> IdentityRoles { get; set; }
        public System.Data.Entity.DbSet<C2T.Models.RoleViewModel> RoleViewModels { get; set; }
        public System.Data.Entity.DbSet<C2T.Model.Organisation> Organisations { get; set; }
    }
}

以下是我在查询中包含组织的控制器,但是,我收到错误Invalid object name 'dbo.Organisations'

var selectedUserIds = from user in UserManager.Users
                                  select user;
            selectedUserIds.Include(x => x.Roles).Include(x=>x.Organisations).ToList();

我在数据库中有组织表。谁能告诉我这个错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:0)

不确定您使用的是哪个版本的Identity,但我将假定为3.0或4.0。 Ehasanul发布的对您的问题的评论链接是针对旧版本的,仍然无济于事。

要真正解决您的错误,您的代码似乎不知道该表存在于数据库中。您是否使用迁移?如果是这样,则需要应用它。

另一种可能性是您的代码中没有针对组织的适当模型。您没有在问题中包括它,因此很难知道是否这样做。

您同时拥有以下两行:

public int OrganisationId { get; set; }
public virtual Organisation Organisations { get; set; }
在您的ApplicationUser模型中,

表示ApplicationUser是组织的子级。在这种情况下,您的组织模型应如下所示:

namespace C2T.Models
{
    public class Organisation
    {
        public int OrganisationId { get; set; }

        // Whatever other fields you want
        public string NameOrOtherField { get; set; }

        public virtual ICollection<ApplicationUser> ApplicationUsers { get; set; }
    }
}