扩展IdentityUser,外键成本冲突

时间:2018-10-04 15:35:01

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

我想使用ASP.Net-Identity进行用户管理。为此,我想用一些属性扩展IdentityUser类。

public class AppUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<AppUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    } 

    public int Settings_ID { get; set; }
    public string Position { get; set; }
    public string CompanyName { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
[...]

现在,在我的data context中,我只想为此用户模型创建一个表:

 public class AntContext : IdentityDbContext<AppUser>
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<AntContext>(null);
        modelBuilder.Entity<AppUser>().ToTable("AppUsers");
        base.OnModelCreating(modelBuilder);
    }
        public override IDbSet<AppUser> Users { get; set; }
[...]

但是,当尝试进行update-database时,出现错误消息:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.AppUsers_dbo.AspNetUsers_Id". The conflict occurred in database "C:\USERS\NEUMA\SOURCE\REPOS\MYANTON\MYANTON\APP_DATA\ASPNETDB.MDF", table "dbo.AspNetUsers", column 'Id'.

我知道AspNetUsersIdentityUser的表,但是如何只创建一个表,以免发生冲突?

如何正确扩展IdentityUser类并在我的数据上下文中使用它?

1 个答案:

答案 0 :(得分:1)

解决方案是不混合上下文。保持关注点分离。将迁移脚本用于身份,并为业务上下文(您的数据上下文)创建一个新脚本。

将一个Users表添加到引用IdentityContext中名称或子名称的业务上下文中。请阅读我的答案here,了解类似问题。

此外,也不需要扩展ApplicationUser表。您可以使用AspNetUserClaims添加此类信息。使用自定义类型:

new Claim("http://www.myapp.com/Firstname", "Firstname");

或现有的WIF ClaimType

new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "Lastname");

对于CompanyName,这实际上可能是业务环境的一部分。