1

У меня есть странная проблема, которую я пытаюсь исправить, так как более 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

+0

С таким количеством столбцов - возможно, это еще один столбец, который сталкивается с проблемой длины? Также - не имеет значения, как NH имеет длину, если DB имеет более короткую длину. – Origin

+0

Нет БД имеет тип столбца «Текст» здесь SQL Server, поэтому, очевидно, он не короче. Я вижу атрибуты длины и т. Д., Которые я упоминаю в свободном классе сопоставления, игнорируются. – user2260192

+0

Какова вероятность того, что атрибуты Length игнорируются в приведенной выше конфигурации, Конфигурация FluentConfiguration = Свободно. Настроить(). База данных (pConfigurer) .Mappings (м => { m.HbmMappings.AddFromAssemblyOf (); m.FluentMappings.AddFromAssemblyOf ();} ) – user2260192

ответ

0

Ошибка вы столкнулись ошибка сервера SQL, который бы не случилось с текстом/NTEXT и NVARCHAR (макс) столбцов.

Проблема может появиться, если сумма всей длине колонны (не включая текст/NTEXT/NVARCHAR (макс)/XML/образ) строки превышает максимальный размер строки (8060 байт, см http://technet.microsoft.com/en-us/library/ms143432.aspx)

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

Преобразование nvarchar (1000) в nvarchar (max) может быть решением.

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