• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Entity Framework

VPS Starter Arubacloud
0 głosów
213 wizyt
pytanie zadane 7 października 2022 w C# przez Wokie Nowicjusz (170 p.)

Cześć, stworzyłem sobie klasę instytucja która ma listę klientów wygenerowałem tabele za pomocą Entity Framework.

instytucja.cs:

public class Institution
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
       
        public virtual List<Customer> Customers { get; set; }
    }

Klient:

public int Id { get; set; }
        public string Name { get; set; }
        public string SecoundName { get; set; }
        public string LastName { get; set; }
        public string PasswordHash { get; set; }

        public int InstitutionId { get; set; }
        public virtual Institution Institution { get; set; }

I teraz chciałbym zrobić prosta tabele z Rolami dla klientów:

public class Role
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Jak mogę zrobić relacje między nimi? Próbowałem do klasy klienta dodać:

public int Id { get; set; }
        public string Name { get; set; }
        public string SecoundName { get; set; }
        public string LastName { get; set; }
        public string PasswordHash { get; set; }

        public int InstitutionId { get; set; }
        public virtual Institution Institution { get; set; }
     
        public int RoleId { get; set; }   <-------
        public Role Role { get; set; }   <-------

Migracja sie udaje tabela się tworzy ale podczas dodawania początkowych wartości wyskakuje wyjątek:

SqlException: The MERGE statement conflicted with the FOREIGN KEY constraint "FK_Customers_Roles_RoledId". The conflict occurred in database "InstytucjeDb', table "dbo.Roles", column 'Id'.

Tutaj jeszcze klasa tworząca baze danych i początkowe wartości, może tu jest coś źle:

Tworząca klase:

 public class InstitutionDbContext : DbContext
    {
        private string _connectionString =
           "Server=(localdb)\\mssqllocaldb; Database= InstytucjeDb; Trusted_Connection=True;";


        public DbSet<Institution> Institutions { get; set; }
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Role> Roles { get; set; }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Role>()
                .Property(r => r.Name)
                .IsRequired();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(_connectionString);
        }
    }

Początkowe wartości:

private readonly InstitutionDbContext _dbContext;

        public InstitutionSeeder(InstitutionDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        public void Seed()
        {


            if (_dbContext.Database.CanConnect())
            {
                if (!_dbContext.Roles.Any())
                {
                    var roles = GetRoles();
                    _dbContext.Roles.AddRange(roles);
                    _dbContext.SaveChanges();
                }

                if (!_dbContext.Institutions.Any())
                {
                    var institutions = GetInstitution();
                    _dbContext.Institutions.AddRange(institutions);
                    _dbContext.SaveChanges();   <----- W TYM MIEJSCU WYRZUCA WYJATEK
                }
            }
        }

        private IEnumerable<Role> GetRoles()
        {
            var roles = new List<Role>()
            {
                new Role()
                {
                    Name = "Customer"
                },
                new Role()
                { 
                    Name = "Admin"
                }
            };

            return roles;
        }

 

komentarz 7 października 2022 przez PH03NIX Mądrala (6,130 p.)
Pokaż jak wygląda metoda GetInstitution. Może id roli jest puste w klientach znajdujących się w customers w Institution?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 39 wizyt
pytanie zadane 4 marca w C# przez drewienko Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 87 wizyt
pytanie zadane 16 listopada 2020 w C# przez OlekS Początkujący (280 p.)
0 głosów
0 odpowiedzi 134 wizyt
pytanie zadane 6 maja 2020 w C# przez Kapral214 Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...