SqlException (0x80131904): недопустимое имя объекта 'dbo.Категории'

Я получаю исключение, когда я запускаю приложение. Приложение использует asp.net mvc 3 / C#. Я сделал файл mdf и добавил его в папку App_Data в Visual Web Developer Express. Я добавил строки подключения к сети.папка config, но когда я запускаю и просматриваю /store, я получаю ошибку выше со строкой var categories = storeDB.Categories.ToList(); выделены. Моя база данных содержит 6 таблиц, одна из которых-категория.

:
EventCalendarEntities storeDB = new EventCalendarEntities();

public ActionResult Index()  
{  
    var categories = storeDB.Category.ToList();  
    return View(categories);  
}    

строк подключения в сеть.конфигурационный файл:

<connectionStrings>
   <add name="EventCalendarEntities"
        connectionString="data source=.SQLEXPRESS;
        Integrated Security=SSPI;
        AttachDBFilename=|DataDirectory|MvcEventCalendar.mdf;
        User Instance=true"
        providerName="System.Data.SqlClient" />
</connectionStrings>

5 ответов


это обычно просто означает проблему конфигурации;

  • возможно, действительно нет такой таблицы
  • возможно, стол есть, но не является dbo схема (это может быть в Fred.Categories)
  • возможно, БД чувствительна к регистру (что нормально), и таблица на самом деле dbo.CATEGORIES

любой из них вызовет вышеуказанное исключение. В частности, вы заявляете:

моя база данных содержит 6 таблиц и одним из это категория.

теперь машина, Category != Categories


попробуйте использовать класс model builder.Это способ настройки или явного определения сопоставления между таблицей и классом модели.

в классе entity/context попробуйте добавить этот код

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       base.OnModelCreating(modelBuilder);
       modelBuilder.Entity<Category>().ToTable("Category");
    }

его метод.Убедитесь, что ur использует все операторы including.


то, что вы действительно хотите сделать, чтобы исправить это в вас Context class у вас должен быть метод OnModelCreating... убедитесь, что он имеет это:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

Так как это все еще был верхний поисковый удар по исключению в апреле 2018 года, и это привело меня к решению, позвольте мне прикрепить это для конкретной ситуации...

наше приложение основано на ABP и ABP.Ноль, и у нас уже есть шаблон, который подходит Марка!--5-->. Хотя я ставлю явное отображение в методе OnModelCreating (a la Dhananjay это) работал бы отлично, казалось, что отображение ABP работает отлично до этого момента, и я не хотел нарушать правила.

моим решением было добавить атрибут таблицы в класс сущности, и это разрешило путаницу EF.

using System;
using Abp.Domain.Entities;
using System.ComponentModel.DataAnnotations.Schema;

namespace Discovery.History
{

    [Table("HistoryRecords")]
    public class HistoryRecord : Entity<int>
    {
        public int ResearcherCount { get; set; }
        public DateTime DateSubmitted { get; set; }
        public string Comments { get; set; }
    }
}

проверено, протестировано и проверено для таблицы с категорией имен или любыми ключевыми словами SQL с именем table используйте ToTable для указания конкретного имени таблицы

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.Entity<category>().ToTable("category");
 }