У меня есть странная проблема, которую я пытаюсь исправить, так как более 2 дней.Строка колонка Длина вопроса в большой таблице бегло Nhibernate
У меня есть таблица с 236 столбцами, отображаемая с использованием свободного nHibernate.
FluentConfiguration configuration = Fluently. Configure(). Database (pConfigurer).Mappings(m =>
{
m.HbmMappings.AddFromAssemblyOf<T>();
m.FluentMappings.AddFromAssemblyOf<T>();
})
Есть несколько столбцов, которые текст или VARCHAR (макс) или VARCHAR (800), которые отображаются с использованием длины
Map(x => x.ScDirectorFeeDesc).Column("sc_director_fee_desc").Length(2147483647)
Все хорошо до тех пор, как я чтение значения из База данных даже с длиной более 1000 или более.
Я столкнулся с проблемой, когда я пытаюсь изменить эту строку, которая является более чем 1000 и попытаться сохранить или когда я пытаюсь сохранить новое значение там, его пинать меня исключение ...
Could not synchronize database state with session
NHibernate.Exceptions.GenericADOException: could not execute batch command.[SQL: SQL not available] ---> System.Data.SqlClient.SqlException: String or binary data would be truncated.
The statement has been terminated.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.SqlClient.SqlCommandSet.ExecuteNonQuery()
at NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()
at NHibernate.AdoNet.SqlClientBatchingBatcher.DoExecuteBatch(IDbCommand ps)
--- End of inner exception stack trace ---
at NHibernate.AdoNet.SqlClientBatchingBatcher.DoExecuteBatch(IDbCommand ps)
at NHibernate.AdoNet.AbstractBatcher.ExecuteBatchWithTiming(IDbCommand ps)
at NHibernate.AdoNet.AbstractBatcher.ExecuteBatch()
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session
Я использую Fluent 1.3.0.733 и NHibernate 3.3.1.4000
Если кто-нибудь знает этот вопрос здесь, пожалуйста, дайте мне, что мне было бы очень полезно.
Я попытался упомянуть StringClob & Текст SQLTypes в сопоставлениях, я даже попытался изменить тип столбца на 4000, но он просто не сохраняет его, а генерирует исключение.
Спасибо, Sukumar
С таким количеством столбцов - возможно, это еще один столбец, который сталкивается с проблемой длины? Также - не имеет значения, как NH имеет длину, если DB имеет более короткую длину. – Origin
Нет БД имеет тип столбца «Текст» здесь SQL Server, поэтому, очевидно, он не короче. Я вижу атрибуты длины и т. Д., Которые я упоминаю в свободном классе сопоставления, игнорируются. – user2260192
Какова вероятность того, что атрибуты Length игнорируются в приведенной выше конфигурации, Конфигурация FluentConfiguration = Свободно. Настроить(). База данных (pConfigurer) .Mappings (м => { m.HbmMappings.AddFromAssemblyOf(); m.FluentMappings.AddFromAssemblyOf ();} ) –
user2260192