Не устанавливается обязательная связь элементов таблиц Entity Framework
Выскакивает исключение, которое говорит о том что нет звязи элементов, хотя на диаграмме в 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} вылезает исключение
Ответы (1 шт):
Автор решения: nix
→ Ссылка
В модели 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}");
}
}