在另一个项目中使用asp .net identity用户

时间:2018-06-17 06:58:52

标签: c# asp.net-web-api entity-framework-6 asp.net-identity dbcontext

我有2个项目,其中一个是asp web api,另一个是类库,例如数据访问层,我还有两个实体框架上下文。 我在web api项目中使用了web api的ApiUser。

这是我在webApi项目中的ApiUser:

public class ApiUser : IdentityUser
{
    public int? OrganizationId { get; set; }
    public string Name { get; internal set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApiUser> manager, string authenticationType)
    {
        CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
        return userIdentity;
    }
}

这是我在web api项目中的dbContext:

public class ApiDbContext : IdentityDbContext<ApiUser>
{
    public ApiDbContext()
        : base("PelicanConnection", throwIfV1Schema: false)
    {
    }

    public static ApiDbContext Create()

    {
        return new ApiDbContext();
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ApiUser>().ToTable("ApiUsers");
        modelBuilder.Entity<IdentityRole>().ToTable("ApiRoles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("ApiUserRoles");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("ApiUserClaims");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("ApiUserLogins");


    }
}

这是我在数据访问项目中的背景:

 public class AppContext : DbContext
{
    public AppContext() : base("AppConnection")
    {
        this.Configuration.LazyLoadingEnabled = false;

    }

    public DbSet<ApiUser> ApiUsers { get; set; }
    public DbSet<Reception> Receptions { get; set; }
    public DbSet<Box> Boxes { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Ignore<ApiUser>();
    }
}

为了在两个项目中使用ApiUser,我不得不在数据访问项目上下文中忽略ApiUser。 如何在数据访问上下文中访问ApiUser DbSet?

1 个答案:

答案 0 :(得分:0)

您可以在类对象前添加namespace,以便编译器知道要使用哪一个,不需要忽略。您可以尝试将两个对象相互转换。

您应该查看Dependancy Injection如何解决此问题,例如,您可以创建一个Interface来描述ApiUser,IApiUser,并让两个不同的ApiUser类继承此接口。

https://www.dotnettricks.com/learn/dependencyinjection/implementation-of-dependency-injection-pattern-in-csharp