Область данных, передаваемая системному вызову, слишком мала при сохранении с помощью C # EF6 - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть приложение C #, Winforms EF6.База данных - SQL Server Compact 4. На некоторых компьютерах (большинство работает нормально) я получаю исключение «Область данных, переданная системному вызову, слишком мала» при сохранении простого объекта, как показано в коде ниже

        public void Add(SimpleObject simpleObject)
        {
            try
            {
                using (var db = new MyDbContext())
                {
                    db.SimpleObjects.AddOrUpdate(e => e.Description, simpleObject);
                    db.SaveChanges();
                }
            }
            catch(Exception ex)
            {
                _logger.ErrorException("Add", ex);
                throw;
            }
        }

SimpleObject чрезвычайно прост с 2 столбцами ([ID] INT NOT NULL IDENTITY (1,1), [ОПИСАНИЕ] NVARCHAR (4000)).Экземпляры, которые генерируют исключения, имеют в текстовом поле общий текст (ниже 150 символов), которые на большинстве компьютеров обычно сохраняются.Команда AddOrUpdate выдает исключение.

Полные сведения об исключении, зарегистрированные с NLog:

System.Data.Entity.Core.EntityCommandExecutionException: при выполнении определения команды произошла ошибка.Смотрите внутреннее исключение для деталей.---> System.Data.SqlServerCe.SqlCeException: область данных, передаваемая системному вызову, слишком мала.в System.Data.SqlServerCe.SqlCeCommand.ProcessResults (Int32 ч.) в System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan () в System.Data.SqlServerCe.SqlCeCommand.ExjectSe.Entity.SqlServerCompact.SqlCeMultiCommand.ExecuteReader (поведение CommandBehavior) в System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3, операция TInterceptionContext interceptionContext, действие 3 executing, Action 3 выполняется) в объекте SystemInata..DbCommandDispatcher.Reader (команда DbCommand, DbCommandInterceptionContext interceptionContext) в System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, внутреннее исключение объекта.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, CommandBehavior поведение) в System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType] (контекст ObjectContext, параметр ObjectParameterCollectionValues) в System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T] (Func * 1011).() в System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) в System.Data.Entity.Core.Objects.ObjectQuery 1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() at System.Data.Entity.Internal.LazyEnumerator 1.MoveNext () в System.Linq.Enumerable.SingleOrDefault [TSource] (Набор IEnumerable 1 source) at System.Data.Entity.Migrations.DbSetMigrationsExtensions.AddOrUpdate[TEntity](DbSet 1, набор IEnumerable 1 identifyingProperties, InternalSet 1 internalSet, TEntity []) в System.Data.Entity.Migrations.DbSetMigrationsExtensions.AddOrUpdate [TEntity] (IDbSet 1 set, Expression 1 identifierExpression, TEntity [] entity)>

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 сентября 2019

Вы должны обновить до SQL CE 4.0 SP1, так как он содержит исправление для этой проблемы - см. http://erikej.blogspot.com/2012/03/sql-server-compact-40-sp1-ctp1.html

...