2011-07-05 2 views
-3

Я переименовал таблицу из моей базы данных. Поэтому я также переименовал свою сущность (от Favori to FavorisAffaire). Скомпилирован успешно. Но теперь, когда я запускаю мое приложение, я получаю ошибку ниже:Incoherent error: недопустимое имя объекта

у меня не было этого FavorisAffaires недопустимое имя объекта «dbo.FavorisAffaires» в моем решении!

У меня есть FavorisAffaire (с окончанием концов). Я подозреваю, что что-то не так на фоне моего решения ... Я уже пытаюсь очистить, а затем перестроить, но проблема все еще существует.

Любые идеи?

+0

Что это связано с ASP.NET MVC 3? Пожалуйста, отметьте свой вопрос надлежащим образом, в вашем случае, я полагаю, вы говорите о Entity Framework? –

+0

@Darin: Это решение ASP.NET MVC3. Но вы правы, это, по-видимому, более специфично для проблемы структуры сущности. Я добавил соответствующий тег. – Bronzato

+0

Вы проверили модель? Откройте EDMX в VS, нажмите на таблицу FavorisAffaire и нажмите Alt + F4 (открыть свойства). В свойствах это поле для имени набора объектов. Для большинства слов EF добавляет «S» в конец имени таблицы, чтобы указать множественное число.Удалите «S», если это не имеет смысла для вас? – Smudge202

ответ

2

Вот как работает EF по умолчанию. Он использует плюрализацию имен. Он может быть отключен, или вы можете заставить единый объект сопоставлять правильную таблицу, но все зависит от используемой вами версии EF.

Edit:

oops I forgot to mention that I used Entity Framework Code First.

Да ты забыл упомянуть очень важную часть вашего вопроса.

Существует несколько способов сделать это.

аннотацию данных:

[Table("FavorisAffaire")] 
public class FavorisAffaire 
{ ... } 

Или свободно отображение:

modelBuilder.Entity<FavorisAffaire>() 
      .ToTable("FavorisAffaire"); 

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

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

После удаления соглашения вы должны убедиться, что имя DbSet i с. сингулярно:

public DbSet<FavorisAffaire> FavorisAffaire { get; set; } 

Или просто переименуйте таблицу, поскольку таблицы должны быть множественными.

0

В дополнение к ответу Ladislav Mrnka, я предполагаю, что вы не воссоздали свою базу данных после внесения этих изменений. Поэтому «Code First» сгенерировал табличное имя для вашего нового объекта, которого раньше не было (точнее, его, вероятно, называли «Favoris»). Если теперь вы подключаетесь к базе данных, у которой уже есть старая схема, и вы не заказывали EF для воссоздания базы данных, она будет предполагать, что таблица, которую она ищет (FavoriAffairs), присутствует (а это не так).

Если у вас уже есть данные в таблице «Favoris», я предлагаю вам переименовать его в «FavoriAffairs», иначе пусть Code First воссоздает базу данных. Это делается для установки конкретного инициализатора базы данных, который объясняется здесь: http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

Смежные вопросы