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

Entity Framework

Object Storage Arubacloud
0 głosów
219 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 48 wizyt
pytanie zadane 4 marca w C# przez drewienko Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 16 listopada 2020 w C# przez OlekS Początkujący (280 p.)
0 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 6 maja 2020 w C# przez Kapral214 Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...