2016-04-07 4 views
-1

Я использую Entity framework 6.1.3, и я получаю ограничение в добавлении/обновлении моделей, когда превышает его пределыи становится ниже ошибки.Entity framework 6.1.3 большие модели

Невозможно сгенерировать модель из-за следующего исключения: 'System.Data.Entity.Core.EntityCommandExecutionException: Произошла ошибка при выполнении определения команды. Подробнее см. Внутреннее исключение. ---> System.Data.SqlClient.SqlException: входящий запрос имеет слишком много параметров. Сервер поддерживает максимум 2100 параметров. Уменьшите количество параметров и отправьте запрос повторно. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключения, булева breakConnection, действие 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) в System.Data. SqlClient.TdsParser.TryRun (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, булева & dataReady) на System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, булева асинхронные, Int32 тайм-аут, Задача & задачи, булева asyncWrite, SqlDataReader DS, булева describeParameterEncryptionRequest) на System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, метод String, TaskCompletionSource 1 completion, Int32 timeout, Task& task, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<Reader>b__c(DbCommand t, DbCommandInterceptionContext 1 с) на System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3 операции, TInterceptionContext interceptionContext, действий 3 executing, Action 3) выполнен в System.Data.Entity. Infrastructure.Interception.DbCommandDispatcher.Reader (команда DbCommand, DbCommandInterceptionContext interceptionContext) в System.Data.Entity.Internal.Inter ceptableDbCommand.ExecuteDbDataReader (поведение CommandBehavior) на System.Data.Common.DbCommand.ExecuteReader (поведение CommandBehavior) на System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior) --- Конец внутренней трассировки стека исключений --- в System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior) в System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.Execute (EntityCommand entityCommand, поведение CommandBehavior) в System.Data.Entity.Core.EntityClient.EntityCommand.ExecuteReader (поведение CommandBehavior) по адресу Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.Sc hemaDiscovery.EntityStoreSchemaGeneratorDatabaseSchemaLoader.LoadDataTable [Т] (Строка SQL, Func 2 orderByFunc, DataTable table, EntityStoreSchemaFilterObjectTypes queryTypes, IEnumerable 1 фильтров, String [] filterAliases) на Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.EntityStoreSchemaGeneratorDatabaseSchemaLoader.LoadRelationships (IEnumerable 1 filters) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.EntityStoreSchemaGeneratorDatabaseSchemaLoader.LoadStoreSchemaDetails(IList 1 фильтров) в Microsoft .Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GetStoreSchemaDetails (StoreSchemaConnectionFactory ConnectionFactory) на Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.CreateStoreModel() в Microsoft.Data.Entity.Design .VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel (Список 1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, ModelBuilderSettings settings, List 1 ошибка) по адресу Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel (параметры ModelBuilderSettings, IVsUtils vsUtils, ModelBuilderEngineHostContext hostContext). Загрузка метаданных из базы данных заняла 00: 00: 01.8445312. Создание модели принимало 00: 00: 15.0864187.

+0

Если вы говорите о получении модели для подхода DBFirst, я думаю, вам нужно опубликовать сообщение об ошибке EF. Между тем вы можете перейти от DBFirst к CodeFirst, считывая исходную модель из БД. – bubi

+0

Спасибо за ваш быстрый ответ, я опубликую свою ошибку в EF. – Satvik

+0

У этого есть какие-нибудь обновления? Была ли проблема исправлена? У меня такая же проблема. –

ответ

0

Это не ограничение рамки сущности, а ограничение SQL-сервера. Вы не можете иметь более 2100 параметров для инструкции IN.

SELECT * FROM YourTable WHERE YourColumn IN (1,2,....,2101) 

Так что я вижу 2 обходные пути для этого:

  1. Разделить запрос в нескольких запросов отправки каждый раз меньше < 2100 параметров для заявления IN.
  2. Вставьте все параметры в специальную таблицу БД, а затем выполните запрос к этой таблице. Например, вы можете создать временную таблицу, вставить там более 2100 параметров, а затем присоединить таблицу к этой временной таблице.

CREATE TABLE #temptable (id int); INSERT INTO #temptable (id) VALUES (1), (2), (3) SELECT * FROM YourTable yt INNER JOIN #temptable tt ON yt.id = tt.id

+0

Как вставить все параметры в специальную таблицу БД и выполнить запрос? – Satvik

+0

Я не вижу ни одного вашего кода, поэтому я не понимаю, где именно происходит эта проблема. Не могли бы вы отправить код относительно обновления модели, который вызывает исключение? Я обновил ответ, чтобы показать, что я имею в виду под специальной таблицей DB. – 3615

+0

У меня есть таблица 350 в моем .edmx-файле, теперь, если я добавляю/обновляю модель в существующую edmx, я получаю исключение, о котором упоминалось выше. – Satvik

0

Я была такая же проблема, что я сделал, есть удалены все объекты из модели, а затем добавляют их в модель, и это сработало.

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