SqlException (0x80131904): недопустимое имя объекта 'dbo.Categories' - PullRequest
11 голосов
/ 21 марта 2011

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

Контроллер:

EventCalendarEntities storeDB = new EventCalendarEntities();

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

Строки подключения в файле web.config:

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

Ответы [ 5 ]

23 голосов
/ 21 марта 2011

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

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

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

Моя база данных содержит 6 таблиц, и одна из них - Категория.

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

6 голосов
/ 17 апреля 2012

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

В вашем классе сущности / контекста попробуйте добавить этот код

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

Это метод. Убедитесь, что вы используете все включающие операторы.

2 голосов
/ 04 апреля 2018

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

Наше приложение основано на ABP иABP.Zero, и у нас уже есть шаблон, который соответствует ответ Марка .Хотя я ставлю на то, что явное сопоставление в методе OnModelCreating (в качестве ответа Дхананджея ) сработало бы отлично, казалось, что до этого момента отображение 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; }
    }
}
2 голосов
/ 06 января 2016

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
1 голос
/ 14 апреля 2016

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

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.Entity<category>().ToTable("category");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...