2017-01-09 1 views
0

클레임을 그룹화하여 AspNet ID를 확장하려고합니다. 새로운 QueryAppGroup 엔티티로이 작업을 수행하고 있습니다. 특정 그룹의 클레임을 모두 삭제할 수있게하려면 &을 추가하고 싶습니다. 그래서 여기 내 계획입니다 추가 괜찮했지만, 난 (ID로 예) 특정 주장을 제거하는 방법을 찾을 수 있습니다클래스를 인터페이스로 변환 할 수 없습니다.

  • 가 IdentityUserClaim은 한 - 투 - 제로가되도록 QueryAppGroupClaim라는 중간 엔티티를 생성 또는 그것과의 관계.

  • 특정 QueryAppGroupClaim 엔티티를 삭제하면 삭제가 IdentityUserClaim과 연계되어야합니다.

  • 이 작업을 수행하기 위해, 나는 (ApplicationUserClaim 참조) QueryAppGroupClaim에 다시 탐색 속성 IdentityUserClaim을 확장 할 필요가

코드 :

public class ApplicationUserClaim : IdentityUserClaim<string> 
{ 
    [ForeignKey("QueryAppGroupClaim")] 
    public virtual int QueryAppGroupClaimId { get; set; } 
    public virtual QueryAppGroupClaim QueryAppGroupClaim { get; set; } 
} 

public class QueryAppGroup 
{ 
    public QueryAppGroup() 
    { 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [ForeignKey("ApplicationUser")] 
    public String UserId { get; set; } 

    public String Desc { get; set; } 

    public String ImpersonateClaimType { get; set; } 

    public virtual ApplicationUser ApplicationUser { get; set; } 
} 

public class QueryAppGroupClaim 
{ 
    public QueryAppGroupClaim() 
    { } 

    [Key, ForeignKey("IdentityUserClaim")] 
    public int ClaimId { get; set; } 
    public virtual ApplicationUserClaim IdentityUserClaim { get; set; } 

    [ForeignKey("QueryAppGroup")] 
    public int QueryAppGroupId { get; set; } 
    public virtual QueryAppGroup QueryAppGroup { get; set; } 
} 


public class ApplicationUser : IdentityUser<string, IdentityUserLogin, IdentityUserRole, ApplicationUserClaim>, IUser, IUser<string> 
{ 
    //... 
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, ApplicationUserClaim> 
{ 
    //... 
    public DbSet<QueryAppGroup> QueryAppGroups { get; set; } 

    public DbSet<QueryAppGroupClaim> QueryAppGroupClaims { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<ApplicationUserClaim>() 
      .HasOptional(t => t.QueryAppGroupClaim) 
      .WithRequired(t => t.IdentityUserClaim) 
      .WillCascadeOnDelete(); 
    } 
} 

public class ApplicationUserStore : UserStore<ApplicationUser,IdentityRole,string, IdentityUserLogin, IdentityUserRole, ApplicationUserClaim> 
{ 
    //... 
    //Already exists with an override of RemoveClaimAsync(...) 
} 

public class ApplicationUserManager : UserManager<ApplicationUser> 
{ 
    public ApplicationUserManager(IUserStore<ApplicationUser> store) 
     : base(store) 
    { 
    } 

    public ApplicationUserManager(ApplicationUserStore store) 
     : base(store) 
    { 

    } 
    //... 
} 

내가 public ApplicationUserManager(ApplicationUserStore store) : base(store) 때와 compiliation 오류를 받고 있어요 Argument 1: cannot convert from 'ApplicationUserStore' to 'Microsoft.AspNet.Identity.IUserStore<ApplicationUser>'라고하는 기본 생성자를 호출합니다. 내 클래스 ApplicationUserStore는 UserStore를 확장합니다.이 자체는 여러 인터페이스를 구현하며 하나는 IUserStore입니다. 이 문제를 해결하는 방법을 볼 수 없습니다. 도와주세요.

주요 목표를 쉽게하기위한 제안도 환영합니다!

+0

안녕 스콧,'IUserStore는 '에서'ApplicationUserStore'이 문제를 해결 구현 했습니까? 아직 문제가있는 경우 다른 아이디어가 있습니다. – Peter

+0

예, 이것이 제대로 작동하여 내 모델을 조정할 수있어서 내 앱이 예상대로 작동합니다. 감사합니다! –

답변

0

명시 적으로 다음과 같이 UserStore의 기본 클래스 선언과 함께 IUserStore<ApplicationUser>를 구현하는보십시오 :

public class ApplicationUserStore : 
    UserStore<ApplicationUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, ApplicationUserClaim>, 
    IUserStore<ApplicationUser> 
{ 
    public ApplicationUserStore(DbContext context) : base(context) 
    { 

    } 
} 
관련 문제