Код EF 4.1 сначала все еще ищет старую таблицу, которая больше не существует - PullRequest
1 голос
/ 16 августа 2011

Сначала я использую код Entity Framework 4.1.

У меня в базе данных есть таблица с именем MaritalStatus.Я удалил его и создал на его месте новую таблицу с именем MaritalStatuses.Всякий раз, когда я пытаюсь получить все записи из таблицы, я получаю сообщение об ошибке:

Неверное имя объекта 'dbo.MaritalStatus'.

Запрос, который он пытается выполнитьexecute is:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[IsActive] AS [IsActive]
FROM [dbo].[MaritalStatus] AS [Extent1]}

Почему он все еще ищет таблицу MaritalStatus, которую я удалил?Возможно ли, что он где-то кешируется?Я удалил всю базу данных и воссоздал ее с помощью скриптов.Все еще не повезло.Может быть, у него есть проблема, когда дело касается части «es» имени?

Контекстный класс:

public class HefContext : DbContext
{
   public DbSet<Bank> Banks { get; set; }
   public DbSet<AccountType> AccountTypes { get; set; }
   public DbSet<MaritalStatus> MaritalStatuses { get; set; }
}

Просмотр модели (с частичными свойствами):

public class EditGrantApplicationViewModel
{
   public int Id { get; set; }
   public string EmployeeNumber { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int MaritalStatusId { get; set; }
   public IEnumerable<MaritalStatus> MaritalStatuses { get; set; }
   public int BankId { get; set; }
   public IEnumerable<Bank> Banks { get; set; }
   public int AccountTypeId { get; set; }
   public IEnumerable<AccountType> AccountTypes { get; set; }
}

Раскрывающийся список для MaritalStatuses:

<td><label>Marital Status:</label> <span class="red">**</span></td>
<td>
   @Html.DropDownListFor(x => x.MaritalStatusId, new SelectList(Model.MaritalStatuses, "Id", "Name", Model.MaritalStatusId), "-- Select --")
   @Html.ValidationMessageFor(x => x.MaritalStatusId)
</td>

Контроллер:

public ActionResult Create()
{
   EditGrantApplicationViewModel viewModel = new EditGrantApplicationViewModel
   {
      MaritalStatuses = maritalStatusService.GetAll(),
      Banks = bankService.GetAll(),
      AccountTypes = accountTypeService.GetAll()
   };

   return View(viewModel);
}

Служба:

public IEnumerable<MaritalStatus> GetAll()
{
   return maritalStatusRepository.GetAll();
}

Репозиторий:

HefContext db = new HefContext();

public IEnumerable<MaritalStatus> GetAll()
{
   return db.MaritalStatuses;
}

Класс модели:

public class MaritalStatus
{
   public int Id { get; set; }
   public string Name { get; set; }
   public bool IsActive { get; set; }
}

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Возможно, вы переименовали таблицу в вашей базе данных, но ваш класс Model все еще привязан к старому имени. Вам необходимо сопоставить сущность с нужным именем таблицы в методе OnModelCreating вашего объекта DbContext

public class HefContext : DbContext
{
   public DbSet<Bank> Banks { get; set; }
   public DbSet<AccountType> AccountTypes { get; set; }
   public DbSet<MaritalStatus> MaritalStatuses { get; set; }
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<MaritalStatus>().ToTable("MaritalStatuses");
   }
}

Обновление:

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

0 голосов
/ 16 августа 2011

Полагаю, это неправильно:

public DbSet<MaritalStatus> MaritalStatuses { get; set; }

Должно быть:

public DbSet<MaritalStatuses> MaritalStatuses { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...