EntityType 'IdentityUserLogin' не определен ключ. После попытки настроить внешний ключ - PullRequest
0 голосов
/ 21 октября 2019

Я использую первоочередную структуру кода объекта.

Для моего приложения клиент должен иметь создателя, который является пользователем из AspNetUser.

Класс клиента

    public class Customer
    {
        public string CreatorId { get; set; }
        [ForeignKey("CreatorId")]
        public ApplicationUser Creator { get; set; }
    }

IdentityModel

    public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("AgueroCRMDbContext", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }

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

AgueroCRM.Data.Service.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.
AgueroCRM.Data.Service.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType.
IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined.
IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.

Line 38:         public IEnumerable<Customer> GetAll()
Line 39:         {
Line 40:             return from r in db.Customer    <-- error occurs here
Line 41:                    orderby r.Id
Line 42:                    select r;

Все работало, пока я не решил добавить эту внешнююключ.

Редактировать: Я думаю, что это может быть связано с невозможностью доступа к IdentityDbContext, который содержит ApplicationUser из DbContext, который содержит клиентов.

Кто-нибудь знает, как решить эту проблему?

Решено: путем слияния моего ApplicationDbContext с моим Main DbContext

    public class AgueroCRMDbContext : IdentityDbContext<ApplicationUser>
    {
        public DbSet<Customer> Customer { get; set; }

        public AgueroCRMDbContext()
            : base("AgueroCRMDbContext", throwIfV1Schema: false)
        {
        }

        public static AgueroCRMDbContext Create()
        {
            return new AgueroCRMDbContext();
        }
    }

1 Ответ

0 голосов
/ 21 октября 2019

Как у вас стартап-класс? Вчера я столкнулся с той же проблемой, я забываю службы вызовов. AddIdentity (). Вы вызывали этот метод на своем классе запуска?

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<YourIdentityDbContext>(
                options =>
                options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, IdentityRole>(
                options =>
                {
                    options.SignIn.RequireConfirmedAccount = false;
                    options.Password.RequireUppercase = false;
                    options.Password.RequireNonAlphanumeric = false;
                    options.Password.RequireDigit = false;

                }).AddEntityFrameworkStores<UnaIdentityDbContext>();

            services.AddAuthentication();
            services.AddAuthorization();


        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...