Ответ 1
Нашел ответ на мой вопрос. Спасибо всем за ответы.
Database.SetInitializer<MyContext<Label>>(null);
Это устраняет проблему и отключает отслеживание изменений DB в EF.
Я разрабатываю приложение ASP.NET MVC 4 с использованием VS 2010 и EF 4.3. Он извлекает некоторые данные из внешней базы данных, и все работает так, как ожидалось, пока я не попытался перекомпилировать его в один прекрасный день. После компиляции я получаю следующую ошибку EF:
Недопустимое имя столбца 'CreatedOn'.
Никаких изменений в DB или код не было сделано - я просто добавил некоторые отступы для чтения. Предыдущие версии приложений из TFS также вызывают одно и то же исключение.
У меня нет объектов CreatedOn
в моих сущностях и нет такого поля в базе данных, и я не нуждаюсь в нем и не хочу его в любом случае.
Что нужно сделать, чтобы избежать этого исключения?
Это мой пользовательский контекст БД, который я использую для доступа к данным:
public class MyContext<T> : DbContext where T : class, IDataEntity
{
public MyContext(string connectionKey)
: base("name=" + connectionKey)
{
Configuration.AutoDetectChangesEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Label>().Property(item => item.Id).HasColumnName("LabelId");
modelBuilder.Entity<Label>().Ignore(item => item.ChangedBy);
}
}
И это класс Label
public class BaseEntity : IDataEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string ChangedBy { get; set; }
}
public class Label : BaseEntity
{
}
Нашел ответ на мой вопрос. Спасибо всем за ответы.
Database.SetInitializer<MyContext<Label>>(null);
Это устраняет проблему и отключает отслеживание изменений DB в EF.
В моем случае это был MiniProfiler. Я использую EF 5.0, он использует EF 4.x. После отключения профилировщика исключение больше не выбрасывалось
EF 4.3.1 добавлен столбец CreatedOn
в таблицу __MigrationHistory
, которую впоследствии удалил EF 5.0. Я подозреваю, что вы обновили EF до 4.3.1 с момента последнего обновления базы данных.
Вы можете запустить Миграцию, чтобы добавить столбец CreatedOn
, вручную добавить его самостоятельно или обновить до EF 5.0, где он больше не нужен.
На самом деле в таблице __MigrationHistory есть столбец CreateOn, поэтому проблема может быть связана с миграциями EF. Если нет изменений кода, ожидающих миграции или чего-либо, ошибка действительно очень странный случай.
PS. Я нашел это, это может оказаться полезным: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html