Не устанавливается обязательная связь элементов таблиц Entity Framework

Рейтинг: 0Ответов: 1Опубликовано: 06.05.2023

Выскакивает исключение, которое говорит о том что нет звязи элементов, хотя на диаграмме в sql она вроде есть

internal class Books
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int AuthorsID { get; set; }
        public virtual Library library{ get; set; }
    }

internal class Library
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public string Style { get; set; }

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

internal class MyDbContext : DbContext
    {
        public MyDbContext() : base("DbConnectionString")
        {

        }
        public DbSet<Library> Libraries { get; set; }
        public DbSet<Books> Books { get; set; }
    }

И сама программа, которая добавляет элементы в таблицу и выводит инфу в консоль

using(var context = new MyDbContext())
            {
                var author = new Library()
                {
                    Name = "Gogol",
                    Style = "Horror"
                };
                

                var author2 = new Library()
                {
                    Name = "Puskkin"
                };
                context.Libraries.Add(author);
                context.Libraries.Add(author2);
                context.SaveChanges();

                var books = new List<Books>()
                {
                    new Books() { Name = "Viy", AuthorsID = author.Id},
                    new Books() { Name ="Evgeniy Onegin", AuthorsID = author2.Id}
                };
                context.Books.AddRange(books);
                context.SaveChanges();

                foreach (var book in books) {


                    Console.WriteLine($" Book name = {book.Name}, Authors name = {book.library.Name}");
                }

И когда я пытаюсь вывести автора книги {book.library.Name} вылезает исключение

Ответы

▲ 0

В модели Books свойство AuthorsID не нужно

В своем примере я кое что переименовал)

        internal class Book
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public virtual Author Author { get; set; }
        }

        internal class Author
        {
            public int Id { get; set; }
            public string Name { get; set; }

            public string Style { get; set; }

            public virtual ICollection<Book> Books { get; set; }
        }

        internal class MyDbContext : DbContext
        {
            public MyDbContext() : base("DbConnectionString")
            {
                
            }
            public DbSet<Author> Authors { get; set; }
            public DbSet<Book> Books { get; set; }
        }




        using (var context = new MyDbContext())
        {
            var author = new Author()
            {
                Name = "Gogol",
                Style = "Horror"
            };


            var author2 = new Author()
            {
                Name = "Puskkin"
            };
            context.Authors.Add(author);
            context.Authors.Add(author2);
            var books = new List<Book>()
            {
                new Book() { Name = "Viy", Author = author},
                new Book() { Name ="Evgeniy Onegin", Author = author2}
            };
            context.Books.AddRange(books);
            context.SaveChanges();

            foreach (var book in books)
            {


                Console.WriteLine($" Book name = {book.Name}, Authors name = {book.Author.Name}");

            }
        }