Entity Framework, relacje w C#

0

Witam, mam stworzoną bazę danych za pomocą frameworka Entity, sposobem CodeFirst. W jaki sposób można się odwołać do kolumn które zostały stworzone automatycznie przez Entity, odpowiedzialnych za relacje między tabelami? Dokładnie chodzi mi o to:

klasa Book:

class Books : iSelect
    {
        public int ID { get; set; }
        public string bookName { get; set; }
        public DateTime addTime { get; set; }
        public byte[] image { get; set; }
        public virtual List<Grades> Grade { get; set; }
        public virtual Authors Author { get; set; }
        public Books()
        {
            this.Grade = new List<Grades>();
        }

klasa Authors:

class Authors : iSelect
    {
        public int ID { get; set; }
        public string authorName { get; set; }
        public string authorSurname { get; set; }
        public DateTime birthDate { get; set; }
        public virtual List<Books> Book { get; set; }
        public Authors()
        {
            this.Book = new List<Books>();
        }

Co daje nam relacje 1:N, w tabeli BOOKS została stworzona dodatkowa kolumna Author_ID, do której nie mogę/umiem się odwołac, a chce wyswietlić informacje o książce oraz o jej autorze w selectcie. Próbowałem joinem :

var query = from autor in db.Authorstab
join book in db.Bookstab on autor.ID equals book.ID <-- w tym miejscy nie mozna odwołać sie do book.Author_ID
select new { Authors = autor.authorName, Books = book.bookName };

Dziękuję za pomoc
Pozdrawiam

3

Nie relacje tylko powiązania.

Korzystając z ORMa operujesz na obiektach, nie na bazodanowych tworach w rodzaju kluczy obcych. Nie potrzebujesz robić żadnego joina, bo przecież książka ma już powiązany ze sobą obiekt autora. Wystarczy mniej więcej taki kod:

var infos = db.Books.Select(q => new { BookName = q.Name, AuthorName = q.Author.Name }).ToList();

P.S. Klasa opisująca jedną książkę to Books, a kolekcja książek w klasie autora to Book. Gdzie tu jakikolwiek sens? Nie wspominając już o tym, że nie stosujesz się do zasad pisania kodu w C# i np. nazwy właściwości zaczynasz małymi literami.

0

Dzięki za rady, zostały poprawione.
Mam jeszcze takie pytanie: w takim razie jak odwołać się w relacji wiele do wielu pomiedzy tabelami BOOKS i GRADE?

class Grades
    {
        public int ID { get; set; }
        public string GradeName { get; set; }
        public virtual List<Books> Book { get; set; }
        public Grades()
        {
            this.Book = new List<Books>();
        }
    } 

chcialbym pobrac tylko GradeName.

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