недавно обновил проект с ядром asp.net до версии 1.1. Все пакеты обновлены. и все исправления startup.cs сделаны на основе документации, которую я нашел в Интернете.
У меня возникла серия ошибок, связанных с областями пользователей, ролей и утверждений в существующем коде, который работал раньше. Мне нужно найти решение с минимальным изменением БД. Я уверен, что упускаю что-то простое.
Вот пример кода, где роли не имеют претензий. которая выдает ошибку CS1061
«Роль» не содержит определения «Утверждения», и доступный метод расширения «Утверждения», принимающий первый аргумент типа «Роль», не найден (отсутствует директива using или ссылка на сборку?)
var roles = await _db.Roles.Where(x => x.Claims.Any(y => y.ClaimType == "Leadership")).ToListAsync().ConfigureAwait(false);
CS1061 «Пользователь» не содержит определения «Роли», и нет доступного метода расширения «Роли», принимающего первый аргумент типа «Пользователь» (вы пропускаете использованиедиректива или ссылка на сборку?)
await _db.Users.Include(x => x.Roles).....
У меня есть пользовательское определение пользователя и роли с добавленными переменными.
public class User : IdentityUser<int>
public class Role : IdentityRole<int>
Вот модель создания
public class ApplicationDbContext : IdentityDbContext<User, Role, int>
{
........
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.HasDefaultSchema("core");
builder.Entity<User>().ToTable("Users", "core");
builder.Entity<Role>().ToTable("Roles", "core");
builder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims", "core");
builder.Entity<IdentityUserRole<int>>().ToTable("UserRoles", "core").HasKey(x => new { x.UserId, x.RoleId });
builder.Entity<IdentityUserLogin<int>>().ToTable("UserExternalLogins", "core").HasKey(x => x.ProviderKey);
builder.Entity<IdentityUserToken<int>>().ToTable("UserTokens", "core").HasKey(x => new { x.UserId, x.Value });
builder.Entity<IdentityRoleClaim<int>>().ToTable("RoleClaims", "core");
, а также часть запуска ConfigureServices для запуска. 1018 *
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(
maxRetryCount: 10,
maxRetryDelay: TimeSpan.FromSeconds(30),
errorNumbersToAdd: null);
}), ServiceLifetime.Transient);
services.AddIdentity<User, Role>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
services.AddRazorPages();
services.Configure<IdentityOptions>(options =>
{
// Default Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.AllowedForNewUsers = true;
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 6;
options.User.RequireUniqueEmail = true;
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
options.AccessDeniedPath = "/unauthorized";
options.Cookie.Expiration = TimeSpan.FromDays(150);
});
services.AddSingleton<IAuthorizationHandler, AuthorizeMemberHandler>();
services.AddSingleton<IAuthorizationHandler, AuthorizeMemberOrBotHandler>();
services.AddAuthorization(options =>
{
options.AddPolicy("Mgmt", policy => policy.RequireClaim("Mgmt"));
options.AddPolicy("Member", policy => policy.Requirements.Add(new MemberRequirement()));
options.AddPolicy("MemberOrBot", policy => policy.Requirements.Add(new MemberOrBotRequirement()));
});
services.AddScoped<ShoppingBag>();
services.Configure<FormOptions>(x => x.ValueCountLimit = 2048);
services.AddMvc();
services.AddRouting(options => {
options.LowercaseUrls = true;
options.AppendTrailingSlash = true;
});
services.AddMvc(options => options.EnableEndpointRouting = false);
Пожалуйста, дайте мне знать, если я забыл какую-либо информацию,спасибо.