System.Data.SqlClient.SqlException: недопустимое имя столбца 'GenreId' - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок в ASP.NET и изучаю MVC и EF. Я не смог найти ни одного существующего ответа на мой вопрос, поэтому, пожалуйста, помогите. Сначала используется код.

Я получаю ошибку: Error Вот код для метода действия в контроллере:

public ActionResult Index()
    {
        var book = _context.Books.Include(b => b.Genre).ToList();
        return View(book);
    }

Вот модель Book.cs:

public class Book
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    [Required]
    [StringLength(17)]
    public string ISBN { get; set; }

    [Required]
    public string Author { get; set; }

    [Required]
    public string Publisher { get; set; }

    public Genre Genre { get; set; }

    [Required]
    [Display(Name = "Genre")]
    public byte GenreId { get; set; }

    [Display(Name = "Published Year")]
    public DateTime PublishedYear { get; set; }

    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Display(Name = "Number in Stock")]
    [Range(1, 20, ErrorMessage = "The field Number in Stock must be between 1 and 20")]
    public byte NumberInStock { get; set; }

Вот DbSets:

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Book> Books { get; set; }
    public DbSet<MembershipType> MembershipTypes { get; set; }
    public DbSet<Genre> Genres { get; set; }

А вот и таблица: Столбцы в таблице

Так что, когда я отлаживаю проект, вот исключение: Ошибка = Оценка функции требует запуска всех потоков. Debug

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

проблема в отношении между Book и Genre. Пожалуйста, прочитайте эту статью.

Навигационное свойство (Genre) в классе Book возвращает ссылку на объект Genre. С другой стороны, навигационное свойство в классе Genre возвращает коллекцию books.

Модель book создала внешний ключ Genre_Id в таблице book. Вы можете включить foreign Key Property в зависимый класс (Book).

Отношение один ко многим с использованием аннотаций данных:

[ForeignKey("GenreId ")]
public Genre Genre { get; set; }
[Required]
[Display(Name = "Genre")]
public byte GenreId { get; set; }

Отношение один ко многим с использованием Fluent API:

modelBuilder.Entity<Book>()
            .HasRequired(e => e.Genre)
            .WithMany(d => d.books);

Добавьте это в методе OnModelCreating в вашем ApplicationDbContext.

, а также добавить строку ниже в Genre классе для Отношения один-ко-многим (если вы не добавили):

public ICollection<Book> Books { get; set; } 
0 голосов
/ 06 ноября 2018

Добавьте следующую аннотацию к public Genre Genre { get; set; }

[ForeignKey("Genre_Id")]

Это должно помочь, потому что EF сгенерировал неверное имя иностранного ключа в базе данных. Добавляя аннотацию, вы сообщаете EF, как столбец назван в базе данных.

...