Настройка ConnectionTimeout при использовании EntityFramework

Я хотел бы установить ConnectionTimeout на что-то другое, чем значение по умолчанию, которое составляет 15 секунд. Я унаследовал код, который использует EntityFramework и приложение.конфигурация выглядит так:

<configuration>
   <configSections>
      <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.SQLEXPRESS; Integrated Security=True; ConnectionTimeout=30; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="Data Source=.SQLEXPRESS; Integrated Security=True; ConnectionTimeout=30; MultipleActiveResultSets=True" />
  </parameters>
</defaultConnectionFactory>
</entityFramework>

Я тот, кто добавил sectino в попытке получить вещи работать. Я могу сказать, что он не работает, устанавливая точку останова:

var adapter = (IObjectContextAdapter) this;
var objectContext = adapter.ObjectContext;
objectContext.CommandTimeout = CommandTimeoutSeconds;
int test = objectContext.Connection.ConnectionTimeout;

тест всегда 15. Что происходит? Может кто подскажет как настроить Параметра connectiontimeout? Я пробовал как "ConnectionTimeout", так и "тайм-аут соединения", т. е. нет пространства против пространства.

может кто-нибудь помочь мне? Я выдергиваю волосы. Я уверен, что это простое решение! Дэйв!--4-->

дополнительная информация. В ответ на комментарий, вот мой производный класс DbContext...

public class SessionDataContext : DbContext
{
    // Command timeout (seconds)
    private const int CommandTimeoutSeconds = 30;

    /// <summary>
    /// Constructor that takes db name.
    /// The connection string and db itself is configured in the this project's app.config file
    /// </summary>
    /// <param name="dbName"></param>
    public SessionDataContext(string dbName) : base(dbName)
    {
        Database.SetInitializer(new SessionDataContextInitializer());

        // Set timeout (based on code from http://stackoverflow.com/questions/6232633/entity-framework-timeouts)
        var adapter = (IObjectContextAdapter) this;
        var objectContext = adapter.ObjectContext;
        objectContext.CommandTimeout = CommandTimeoutSeconds;
        int test = objectContext.Connection.ConnectionTimeout;
    }

    /// <summary>
    /// Session table's records
    /// </summary>
    public DbSet<Session> Sessions { get; set; }

    /// <summary>
    /// SessionType table's records
    /// </summary>
    public DbSet<SessionType> SessionTypes { get; set; }
}

1 ответов


Это была глупость с моей стороны, что вызывает проблемы! Я положил свой ответ здесь, Если у кого-то в будущем возникнет эта проблема. Все, что я набрал выше, правильно и будет работать нормально. Тем не менее, приложение.файл конфигурации, на который я смотрел, был в библиотеке классов (наш слой DataAccess). Фактически, он вообще не использовался, и использовались настройки EntityFramework по умолчанию. Я не уверен, что заставило меня попробовать, но я переместил приложение.настройки конфигурации из приложения слоя DataAccess.config в главное приложение.конфиг и все работало красиво. Все, что я могу сказать в свою защиту, кроме того, что я унаследовал код, это то, что мне не ясно, что значения в приложении.config не используются, и никто не вызывает их или не использует их в своем собственном коде. Скорее MultipleActiveResultSets и ConnectionTimeout используются базовой платформой сущностей.