System.Data.SqlClient.SqlException: недопустимое имя столбца 'GenreId'

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

Я получаю сообщение об ошибке: Ошибка Вот код метода Action в контроллере:

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; }

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

Поэтому, когда я отлаживаю проект, здесь исключение: Error = Для оценки функции требуются все потоки. отлаживать

Всего 2 ответа


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

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

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

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

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

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

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

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

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

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

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

[ForeignKey("Genre_Id")]

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


Есть идеи?

10000