2014-05-13 4 views
2

지금까지 내가 GUID를 사용하는 모든 종류의 변환에는 문제가 없었습니다 GUID를 지원하지 않는 나타납니다 (예) :이 Asp.Net 정체성 2.0의으로 roleManager은

public class UserLogin : IdentityUserLogin<Guid> { ... } 

public class UserRole : IdentityUserRole<Guid> { ... } 

public class UserClaim : IdentityUserClaim<Guid> { ... } 

public class User : IdentityUser<Guid, UserLogin, UserRole, UserClaim> 
{ 
    ... 
} 

public class UserManager : UserManager<User, Guid> { ... } 

Microsoft.AspNet.Identity.UserManager에 더 깊이 살펴보면 :

public class UserManager<TUser, TKey> : IDisposable 
    where TUser : class, Microsoft.AspNet.Identity.IUser<TKey> 
    where TKey : System.IEquatable<TKey> 
{ ... } 

분명히 TKey은 일반이므로 Guid을 허용합니다.

public class RoleManager : RoleManager<Role> 
{ 
} 

그러나 Microsoft.AspNet.Identity.RoleManager의 정의 :

public class RoleManager<TRole> : RoleManager<TRole, string> 
    where TRole : class, Microsoft.AspNet.Identity.IRole<string> 
{ 
} 

역할의 키가 string 경우에만 작동 나타난다

다음 역할 관리자입니다. 이게 버그 야? 아니면 내가 놓친 게 있니?

답변

2

좋습니다. 이것은 아주 이상합니다.

// Assembly Microsoft.AspNet.Identity.Core.dll, v2.0.0.0 
namespace Microsoft.AspNet.Identity 
{ 
    public class RoleManager<TRole> : RoleManager<TRole, string> 
    where TRole : class, Microsoft.AspNet.Identity.IRole<string> 
    { 
    // Summary: 
    //  Constructor 
    // 
    // Parameters: 
    // store: 
    public RoleManager(IRoleStore<TRole, string> store); 
    } 
} 

는하지만 그 다른RoleManager에서 파생!

// Assembly Microsoft.AspNet.Identity.Core.dll, v2.0.0.0 
namespace Microsoft.AspNet.Identity 
{ 
    public class RoleManager<TRole, TKey> : IDisposable 
    where TRole : class, global::Microsoft.AspNet.Identity.IRole<TKey> 
    where TKey : global::System.IEquatable<TKey> 
    { 
    ... 
    } 
} 

은 아마 첫번째 역할 관리자 (Asp.Net 신원 1 string) 일부 레거시 코드입니다. 두 번째에서 파생되는 것은 입니다.

public class RoleManager : RoleManager<Role, Guid> { ... }