Pawan Kiran Ответов: 1

NHibernate на Добавить вопрос/обновления после добавления нового столбца на ASP.NET в MVC


Пожалуйста, помогите мне с нижеприведенным вопросом.
Я добавил новый столбец в существующую таблицу и перестроил код, и он отлично работает при чтении записи.
public TEntity Get(int id) {      
  Session.CacheMode = CacheMode.Normal;
  var entity = Session.Get<TEntity>(id);
  return entity;
}

При сохранении изменений я получаю следующее исключение
public bool Update(TEntity entity)
{
   Session.Transaction.Begin();
   Session.SaveOrUpdate(entity);
   Session.Flush();
   Session.Transaction.Commit(); (Exception at this line)
   return true;
}

Exception Details:
Message: could not execute batch command.[SQL: SQL not available]
Inner Exception: {"Invalid column name 'UseTerms'."}    
Stack Trace:
at NHibernate.Engine.ActionQueue.BeforeTransactionCompletionProcessQueue.BeforeTransactionCompletion()
   at NHibernate.Impl.SessionImpl.BeforeTransactionCompletion(ITransaction tx)
   at NHibernate.Transaction.AdoTransaction.Commit()
   at WebApp.Core.Data.NHibernateData.Repositories.NHibernateRepository`1.Update(TEntity entity) in D:\WebApp\Core\WebApp.Core.Data.NHibernateData\Repositories\NHibernateRepository.cs:line 55
   at WebApp.Core.Logic.Configuration.GroupConfigurationLogic.SaveGroupConig[TEntity,TDto](Int32 groupId, IRepository`1 repository, TDto dto) in D:\WebApp\Core\WebApp.Core.Logic\Configuration\GroupConfigurationLogic.cs:line 63
   at WebApp.Core.Logic.Configuration.ConfigurationService.SaveGroupConfiguration(GroupConfigurationDto groupConfiguration, Guid updatedBy) in D:\WebApp\Core\WebApp.Core.Logic\Configuration\ConfigurationService.cs:line 91
   at WebApp.Core.Wcf.ConfigurationService.SaveGroupConfiguration(GroupConfigurationDto groupConfiguration, Guid updatedBy) in D:\WebApp\Core\WebApp.Core.Wcf\ConfigurationService.svc.cs:line 24
   at SyncInvokeSaveGroupConfiguration(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)


Что я уже пробовал:

Я попробовал 2 способа создать новый столбец

1) Откройте конструктор и создайте новый столбец в Sql (что приводит к тому же исключению)
2) используя метод FluentMigrator Up, я создал новый столбец (столбец создается и после перекомпиляции и выполнения приложения - получается то же самое исключение)
using FluentMigrator;

namespace WebApp.Core.Migrations.Release7_21 
{
	[Migration(202006082020, "AchConfiguration Migration")]
	public class AchConfigurationMigration : Migration 
	{
        public override void Up() {         
            Create.Column("UseTerms").OnTable("AchConfiguration").InSchema("config")
               .AsBoolean().NotNullable().WithDefaultValue(1);
        }
        public override void Down() {
            
        }
	}
}

Richard Deeming

Сообщение об ошибке, по-видимому, предполагает, что новый столбец не существует в базе данных, с которой разговаривает ваш код.

Pawan Kiran

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

1 Ответов

Рейтинг:
1

Member 14970324

Попробуйте использовать Nhibernate profiler и проверить свои запросы Спящий Носорог NHibernate Profiler[^] . В моем случае был скрыт запрос INSERT в таблице [TableName]_AUD, который падает с сообщением "недопустимое имя столбца [ColumnName]" .