通过加入用户详细信息实体从IdentityDbContext获取用户详细信息

时间:2014-09-14 11:12:13

标签: c# asp.net-mvc entity-framework asp.net-mvc-5

我有两个DB上下文。

它们是IdentityDbContext(引用者:ApplicationDbContext)和DbEntites(即DbContext)。

IdentityDbContext仅适用于身份验证和UserManager(不包含用户详细信息实体)。

DbEntites用于除User之外的其他实体(也包含User Details实体)。

IdentityDbContext

public class ApplicationUser : IdentityUser
{
   public int? ContactID { get; set; } // User Details Id
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
        // I want to initialize the Login Entities Automatically So 
        //no Database.SetInitializer<ApplicationDbContext>(null); is used
    }
}

DBEntities

public class DBEntities : DbContext
{
    public DBEntities()
       : base("name=DefaultConnection")
   {
       Database.SetInitializer<DBEntities>(null);
   }
   public DbSet<Contact> Contacts { get; set; } // User Details Entity
}

现在我要列出ApplicationUser中的UserNames以及DbEntites中的名称,地址等详细信息。

我试图加入

public class ApplicationUser : IdentityUser
{
   public int? ContactID { get; set; }

   [ForeignKey("ContactID")]
   public Contact Contact { get; set; }
}
public DbSet<Contact> Contacts { get; set; }

到ApplicationDbContext,但每当我尝试从ApplicationUser获取数据时,它只会给我以下错误

The model backing the 'ApplicationDbContext' context has changed since the database was created.

我尝试在数据库中使用外键作为ContactID。但仍然是同样的错误。我该如何解决这个问题?

请提出任何建议或解决方法。

更新:基本上我只想在ApplicationDbContext中使用联系实体而不使用&#34;支持&#39; ApplicationDbContext&#39;自创建数据库以来,上下文已发生变化。&#34;错误,仍然可以在DbEntites中使用它。

1 个答案:

答案 0 :(得分:0)

我通过为AspNetUsersAspNetRoles创建模型并在DbEntites中使用来解决了这个问题。由于我的DbEntitesSetInitializer to null,它解决了我的问题。

public class AspNetUsers
{
    [Key]
    public string Id { get; set; }
    public string UserName { get; set; }
    public int? ContactID { get; set; }

    [ForeignKey("ContactID")]
    public Contact Contact { get; set; }
    public ICollection<AspNetRoles> Roles { get; set; } 
}

public class AspNetRoles
{
    [Key]
    public string Id { get; set; }
    public string Name { get; set; }
    public ICollection<AspNetUsers> Users { get; set; } 
}

在DbEntites中

modelBuilder.Entity<AspNetUsers>()
                .HasMany(c => c.Roles)
                .WithMany(i => i.Users)
                .Map(t => t.MapLeftKey("UserId").MapRightKey("RoleId").ToTable("AspNetUserRoles"));


public DbSet<AspNetRoles> AspNetRoleses { get; set; }
public DbSet<AspNetUsers> AspNetUserses { get; set; }

这可能不是解决问题的理想方法,但无论如何都是?