Как решить ошибку ApplicationRole "не содержит конструктор, который принимает аргументы 1. [DbInitialize]? - PullRequest
0 голосов
/ 08 февраля 2019

Я создал класс ApplicationRole и унаследован от IdentityRole

using Microsoft.AspNetCore.Identity;

namespace ProjDAL.Entities
{
    public class ApplicationRole : IdentityRole
    {

    }
}

Когда я пытаюсь добавить новые роли, я получаю ошибку:

if (await _roleManager.FindByNameAsync("Quality Manager") == null)
{
    await _roleManager.CreateAsync(new ApplicationRole("Quality Manager"));
}

ApplicationRole не содержит конструктор, который принимает аргументы1. [DbInitialize]

ОБНОВЛЕНИЕ:

Я реализовал конструктор:

public class ApplicationRole : IdentityRole
    {
        public ApplicationRole(string roleName) : base(roleName)
        {
        }
    }

, но теперь получаю ошибку:

System.InvalidOperationException: No suitable constructor found for entity 
type 'ApplicationRole'. The following constructors had parameters that could 
not be bound to properties of the entity type: cannot bind 'roleName' 
in ApplicationRole(string roleName).

1 Ответ

0 голосов
/ 08 февраля 2019

Краткий ответ: Измените ваш код, как показано ниже

public class ApplicationRole : IdentityRole<string>
{
    public ApplicationRole() : base()
    {
    }

    public ApplicationRole(string roleName) : base(roleName)
    {
    }
}

Длинная версия:

«ApplicationRole» не содержитконструктор, который принимает аргументы 1. [DbInitialize] `

Первая ошибка возникает из-за того, что вы пытаетесь создать новую роль с помощью

new ApplicationRole("Quality Manager")

Однако нет конструктора, которыйпринимает одну строку в качестве параметра:

    public class ApplicationRole : IdentityRole
    {

    }

Поэтому он жалуется, что

не содержит конструктор, который принимает аргументы 1. [DbInitialize]

Примечание когда нет явного конструктора, C # создаст его по умолчанию для вас .

Однако, если вы добавите конструктор, как показано ниже:

public class ApplicationRole : IdentityRole
{
    public ApplicationRole(string roleName) : base(roleName)
    {
    }
}

Будет только один конструктор, который принимает string как roleName. Обратите внимание, что это означает, что не существует конструктора, который не принимает аргументов . Как этот конструктор (которыйне принимает аргументов) используется внутренне Identity, жалуется, что No suitable constructor found for entity type 'ApplicationRole'.

В результате, если вы хотите создать ApplicationRole с помощью:

new ApplicationRole("Quality Manager")

, вам нужно создать как ApplicationRole(), так и ApplicationRole(string roleName) конструкторы.

...