我想定製asp.net身份實體下面的:爲什麼這違反了類型參數'TUser'的約束?
public class User : IdentityUser<string, UserClaim, UserRole, UserLogin>
public class UserClaim : IdentityUserClaim<string>
public class UserLogin : IdentityUserLogin<string>
public class UserRole : IdentityUserRole<string>
public class UserToken : IdentityUserToken<string>
public class Role : IdentityRole<string, UserRole, RoleClaim>
public class RoleClaim : IdentityRoleClaim<string>
我已經然後創建的DbContext類像下面的
public class AppDbContext : IdentityDbContext<User, Role, string, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>
然後用
services
.AddIdentity<User, Role>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
配置這些
但我也試過
.AddEntityFrameworkStores<AppDbContext, string>()
我已經在互聯網上看過很多博客文章,例如this,但是其中大部分都必須處理密鑰數據類型的變化,比如int
或Guid
。在我的情況下,我不會更改string
的默認密鑰數據類型。
我所有這些情況下,編譯是確定,但它拋出運行
System.TypeLoadException當錯誤 GenericArguments [0], 'MyIdentity.Entities.User',上 「Microsoft.AspNetCore.Identity .EntityFrameworkCore.UserStore`8 [TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken]' 違反了類型參數'TUser'的約束。
在System.RuntimeTypeHandle.Instantiate(的RuntimeTypeHandle手柄, IntPtr的* Pinst表示,整數numGenericArgs,ObjectHandleOnStack型)在 System.RuntimeTypeHandle.Instantiate(類型[]研究所)在 System.RuntimeType.MakeGenericType(類型[]實例化)
如果我添加定製UserStore
類像this post
public class UserStore : UserStore<User, Role, AppDbContext, string, UserClaim, UserRole, UserLogin, UserToken>
解釋編譯錯誤出現說
CS0311類型「MyIdentity.Entities.Role」不能被用作在通用類型或方法 類型參數「TRole」「UserStore」。有一個從 「MyIdentity.Entities.Role」的隱式引用轉換 「Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole>」
我做錯了嗎?
你的'用戶'類有一個默認構造函數? –
@TheodorosChatzigiannakis:是的。我剛剛檢查過。 '公共用戶():base()' – Lorenzo