2015-07-06 2 views
1

У меня есть база данных MSSQL с примерно 3300 таблицами (не спрашивайте, почему, это Nav ...). Когда я пытаюсь «Обновить модель из базы данных ...» на моем EDMX, я получаю исключение тайм-аута 99 раз из 100. Так что мой вопрос в том, есть ли способ изменить таймаут? Я попытался установить «Connect Timeout» в строке подключения, но ничего не меняет.Модель обновления EDMX из базы данных Timeout

Я также попытался создать учетную запись SQL с доступом только к таблицам, которые мне нужны (около 10), но время ожидания в мастере все еще происходит.

+0

Вам действительно нужны 3300 таблиц в том же файле EDMX? Какие версии SQL Server и EF и EF Tools вы используете? – ErikEJ

+0

Я не сказал, что у моего EDMX было 3300 таблиц, я сказал, что у DB есть 3300 таблиц, тайм-аут возникает, когда мастер пытается получить список таблиц из БД. Поэтому я даже не могу добавить таблицу в свой EDMX. Извините, если не ясно. –

+0

А, ОК. Нет, время ожидания соединения не помогает. И тайм-аут команды не может быть установлен в строке подключения. Можно ли переключиться на «сначала код» (но не на самом деле, т. Е. Никаких миграций)? При изменении базы данных вам придется синхронизировать модель EF вручную. Обычно это не слишком сложно. (Кроме того, поддержка родного edmx исчезнет в EF 7). –

ответ

0

Небольшая работа вокруг:

  • Генерация SQL скрипт для создания только таблицы, нужно из БД
  • Создайте другой БД и выполнить SQL скрипт
  • Генерирование EDMX из этой новой БД
  • Изменить соединение нитка EDMX для подключения к первой БД
0

Кто-то на работе только помог мне это.

  1. Запустите профайлер SQL и попробуйте обновить вашу модель еще раз.
  2. Захват SQL-запроса, который пытается выполнить Visual Studio. Он должен выглядеть примерно так:

    SELECT 
    [Project1].[C1] AS [C1], 
    [Project1].[CatalogName] AS [CatalogName], 
    [Project1].[SchemaName] AS [SchemaName], 
    [Project1].[Name] AS [Name] 
    FROM (SELECT 
        [Extent1].[CatalogName] AS [CatalogName], 
        [Extent1].[SchemaName] AS [SchemaName], 
        [Extent1].[Name] AS [Name], 
        1 AS [C1] 
        FROM (
        SELECT 
        quotename(TABLE_SCHEMA) + quotename(TABLE_NAME) [Id] 
        , TABLE_CATALOG [CatalogName] 
        , TABLE_SCHEMA [SchemaName] 
        , TABLE_NAME [Name] 
        FROM 
        INFORMATION_SCHEMA.TABLES 
        WHERE 
        TABLE_TYPE = 'BASE TABLE' 
    ) AS [Extent1] 
    ) AS [Project1] 
    ORDER BY [Project1].[SchemaName] ASC, [Project1].[Name] ASC 
    
  3. Затем запустите запрос в SS Managment Studio. Когда вы запускаете запрос, результаты должны быть кэшированы. Когда Visual Studio снова запускает запрос, результаты должны возвращаться очень быстро, и это не будет тайм-аутом.

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