EFCore - jakk uniknąć tworzenia kolumn do tabeli typu User

0

Cześć,

tworze sobie model bazy w EFCore (Code-first) i napotkałem się na dziwny problem. Mam taki model dla Usera:

    public class User : Entity, IUserBaseDto
    {
        [Key]
        [Required]
        public int? UserId { get; set; }
        public int? ExternalUserId { get; set; }
        [Required]
        [JsonIgnore]
        public string UserSalt { get; set; }
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string Surname { get; set; }
        public bool IsLocked { get; set; }
        public virtual ICollection<UserLogin> UserLogin { get; set; }
        public virtual ICollection<UserPassword> UserPassword { get; set; }
        public virtual ICollection<UserRole> UserRoles { get; set; }
        [JsonIgnore]
        public List<RefreshToken> RefreshTokens { get; set; }
    }

oraz do tego mam kilka modeli dla różnego rodzaju przedmiotów (każdy z nich dziedziczy po modelu "ItemBase"):

public class Engine : ItemBase
    {
        public Enums.Fuel FuelType { get; set; }
        public decimal EngineAmount { get; set; }
        public decimal Mileage { get; set; }
        public string Number { get; set; }
    }
    public class ItemBase : Entity
    {
        [Key]
        [Required]
        public int? Id { get; set; }
        public string Title { get; set; }
        public string[] PartNumbers { get; set; }
        public decimal Price { get; set; }
        public ICollection<User> AddedBy { get; set; }
        public ICollection<ItemComment> Comments { get; set; }
        public virtual Location Location { get; set; }
        public int? LocationId { get; set; }
        public int? BrandId { get; set; }
        public int? ModelId { get; set; }
        public int? TypeId { get; set; }
        public int? SubTypeId { get; set; }
        public BcDictionaryBase Brand { get; set; }
        public  BcDictionaryBase Model { get; set; }
        public BcDictionaryBase Type { get; set; }
        public BcDictionaryBase SubType { get; set; }

    }

Niestety, przy takim po odpaleniu migracji do mojej tabeli User dodawane są FK dla każdego z modeli.

screenshot-20220114183003.png
Jak mogę tego uniknąć?

1

Napisać poprawnie klasy modelu.
AddeBy na pewno powinno być lista Userów?
User ma dziedziczyć po IUserBaseDto? To jest DTO czy model db?
User ma zawierać listę UserPassword? Będzie miał kilka haseł? Itd... Sporo tego.
Poczytaj jakieś tutoriale.

0

@jacek.placek:

jacek.placek napisał(a):

Napisać poprawnie klasy modelu.
AddeBy na pewno powinno być lista Userów?

Tak, na pewno ;) Jeden przedmiot może być przygotowywany przez kilka osób.

User ma dziedziczyć po IUserBaseDto? To jest DTO czy model db?

To brzydka pozostałość, którą zapomniałem usunąć

User ma zawierać listę UserPassword? Będzie miał kilka haseł? Itd... Sporo tego.

Tak, ma zawierać listę haseł ;) W UserPassword jest data ważności każdego hasła, pozwala to na sprawdzanie czy nowe hasło nie było już wcześniej używane.

1

Aha. Mam nadzieję, że trzymasz hashe tych haseł.
Te Itemy chyba mają być w relacji wiele do wielu z User.
Poczytaj o FluentApi do budowania modelu.

0
jacek.placek napisał(a):

Aha. Mam nadzieję, że trzymasz hashe tych haseł.

Tak, trzymam solone hashe ;)

Te Itemy chyba mają być w relacji wiele do wielu z User.
Poczytaj o FluentApi do budowania modelu.

Ok, dzięki

0

Po co robisz własnego usera, jak masz całe Microsoft Identity, które daje Ci te wszystkie duperele razem z rolami i bezpieczeństwem za free? Tokeny też nie powinny być częścią użytkownika.

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