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