Migracje nie dodają kolumn rozszerzających identity

0

Witajcie,
Mój problem jest taki, że nie mogę rozszerzyć identity o własne pola. Rozszerzyłem klasę IdentityUser


    public class ApplicationUser : IdentityUser
    {


        public virtual ICollection<Order> Orders { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Addresss { get; set; }
        public string CodeAndCity { get; set; }
        [RegularExpression(@"(\+\d{2})*[\d\s-]+", ErrorMessage = "Błędny format numeru telefonu.")]
        public string PhonrNumber { get; set; }
        [EmailAddress(ErrorMessage = "Błędny format adresu e-mail.")]
        public string Email { get; set; }
        public UserData UserData { get; internal set; }
    }

oraz zmodyfikowałem startup


            services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<StoreContext>();

Niestety migracje nie dodają instrukcji do utworzenia nowych kolumn.

Pozdrawiam!

1

A czy twój DBContext dziedziczy z generycznego IdentityDbContext<ApplicationUser ... > ?

0
    public class StoreContext : IdentityDbContext
    {
        public StoreContext(DbContextOptions<StoreContext> options) 
            : base(options)
        {

        }
        public DbSet<Item> Items{get;set;}

        public DbSet<Genre> Genres { get; set; }

        public DbSet<Order> Orders { get; set; }

        public DbSet<OrderItem> OrderItems { get; set; }

    }

Czyli tu był błąd :)
Dziękuję!

0

@szydlak:
Mam pytanie czy jeśli chcę dodać całą klasę do identity(tak jak w tym schemacie z UserData) to czy muszę w tej klasie nadać userdataid i mechanizm musi utworzyć nową tabelę? Czy jedynym wyjściem do dodania kolumn do aspnetusers jest dodanie tam propertisów w ApplicationUser?

1

Jak chcesz mieć klasę UserData to powinna być to tabela osobna z relacją one to one. Tu masz przykład. https://www.learnentityframeworkcore.com/configuration/one-to-one-relationship-configuration. na jednej oraz dwóch tabelach.

0

@szydlak:

Zrobiłem tak jak w poradniku. W aspnetuser dodało się nowe pole z kluczem do mojej klasy datauser. Tak samo w dataUser utworzyłem klucz obcy do aspnetuser.
Z tym, że gdy pobieram sobie dane aktualnego usera:

                var user = await _userManager.FindByIdAsync(this.User.FindFirstValue(ClaimTypes.NameIdentifier));

to prop user.dataUser jest null-em
nie mogę więc wtedy przypisać nowych wartości bo dostaję błąd, że próbuję przypisać wartości do null-a

0

Joina musisz zrobić :P

0

@WeiXiao mógłbyś rozwinąć? Kojarzy mi się tylko zapytanie sql albo linq i nie wiem co miałbym tu połączyć i dla jakiego efektu ;)

2

Koniecznie chcesz wykorzystać UserManagera?. Może lepiej po prostu _context.ApplicationUsers.Include(d => d.UserData) ...

0

@szydlak No właśnie zupełnie zrobiłem inaczej. Nie mogłem powiązać identityuser`a z inną klasą. Podczas aktualizacji dostawałem błędy.
Dodałem więc pola w klasie rozszerzającej identityUsera.
W controllerze po prostu odnalazłem usera po id i przypisałem mu wartości. Aktualizacja przez

_userManager.UpdateAsync(user);

Chyba najlepszy sposób. Wiązanie tabel z identity wydaje mi się, że jest możliwe tylko poprzez powiązanie zewnętrznej klasy z identity. Na odwrót już nie...
Gdybym tak zrobiłem to zapewne przez db context bym wyciągnął sobie dane.

Dzięki za pomoc. Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1