2

到目前为止,我将所有类型转换为使用 Guid(例如)没有问题:

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。这是一个错误还是我错过了什么?

4

1 回答 1

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>
  {
    ...
  }
}

也许第一个角色管理器是一些遗留代码(string对于 Asp.Net Identity 1)。从第二个派生RoleManager似乎是要走的路:

public class RoleManager : RoleManager<Role, Guid> { ... } 
于 2014-05-13T02:02:21.397 回答