Entity Framework 6 - związek encji 1:N

0
    public class FilmTitle : DbContext
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(100)]
        public String Title { get; set; }

        public virtual ICollection<FilmAndere> FilmAndere { get; set; }
    }

    public class FilmAndere
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(50)]
        public String Name { get; set; }


        [Required]
        public int FilmTitleId { get; set; }
        [ForeignKey("FilmTitleId")]
        public virtual FilmTitle FilmTitle { get; set; }
    }

Czy powyższy związek encji jest poprawny? Bo działa jak należy. Wygląda na to, że Entity Framework 6 sam tworzy właściwą kolekcji FilmAndere. Czy nie ma w tym żadnego błędu i jest to w 100% poprawny związek encji i poniższy kod działa poprawnie:


Model.FilmTitle film20 = new Model.FilmTitle()
                    {
                        Title = "Terminator 6",
                    };

Model.FilmAndere newFilmAndere = new Model.FilmAndere();
newFilmAndere.Name = "Andere Andere 1 + " + rnd.Next(100, 999).ToString();
film20.FilmAndere = new List<Model.FilmAndere> { newFilmAndere };

Czy wszystko jednak jest 100% i wszystko dobrze zrobiłam? :P

Nie używam metody OnModelCreating w klasie dziedziczącej po DbContext, gdyż tak jak pisałam wyżej, związek encji robi się automatycznie.

1

Wygląda w porządku.

Kilka porad, ulepszeń :

  1. Jeśli nazywasz właściwość klucza głównego jako Id to nie ma konieczności oznaczania go atrybutem [Key]
  2. Jeśli nazywasz właściwość klucza obcego jako nazwa_tabeliId (w Twoim przypadku FilmTitleId) to nie ma konieczności korzystania z atrybutu [ForeignKey]
  3. Warto korzystać z Fluent API Entity Framework, bo wraz z rozrostem projektu / tabel / liczby właściwości można dostać oczopląsu jeśli chodzi mnogość atrybutów wobec właściwości. Generalnie lepiej jest przebrnąć przez Fluent API i się go porządnie nauczyć, ponieważ nie wszystko można wykonać za pomocą atrybutów - je trakować raczej jako miły dodatek wykorzystywanych w małych projektach.

PS. Dlaczego klasa FilmTitle dziedziczy po DbContext?

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