Как поставить время обращения к серверу (code first entity framework, mvvm wpf)

312
07 марта 2017, 13:22

Создал модель (Code fluent):

    public PersonConfig()
    {
        HasKey(id => id.PersonID);
        Property(name => name.Name).IsRequired().HasMaxLength(50);
    }
    public class Person
    {
        public int PersonID { get; set; }
        public string Name { get; set; }
    }
    class CodeContext: DbContext
    {
        public CodeContext(string connectionString) : base( connectionString)
        {
        }
        public DbSet<Person> Person{ get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new PersonConfig());
            base.OnModelCreating(modelBuilder);
        }
    }

После, во viewmodel отправляю строку, делаю инициализацию:

    try
    {
        using (var cnxt = new CodeContext(connectionString))
        {
             cnxt.Database.Initialize(true);
        }
    }
   catch (Exception ex)
   {
        MessageBox.Show("Произошла ошибка с сервером");
   } 

Проблема такая: если обращаюсь на сервер, который есть, то все отлично, после с ним работаю (если бд нет, создает, если есть, то использует ее). Но если строка сервера неверна, то загрузка идет около 01:07 минут, и только после перемещается в catch(exception ex). Как время обращения к серверу уменьшить?? Или как проверить, корректно ли сервер ввели. Со временем я пытался в CodeContext писать, чтобы 30 секунд, но не работает.:

this.Database.CommandTimeout = 30;

Как решить эту проблему? Мб я неверно делаю инициализацию, хотя по-другому не получается, да и если строка сервера верна, то обращение идет без проблем (но обращение к корректному серверу, изначально, около 8 секунд, что, как кажется, будет много, ведь обращаюсь к себе)?

Answer 1

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

The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error.

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

Connection Timeout=60;

Но, это так, если я обращаюсь к несуществующему серверу, если сервер есть (я пробовал обратиться к себе от прав не администратора, к администратору, к чему доступа как раз нет), и время обращения было 6 секунд! Каков алгоритм времени? Как он выбирает, как и быть теперь?

Параметр Connection Timeout определяет как долго служба SQL будет отвечать на попытку соединения. Другими словами, эту попытку сперва нужно предпринять, достучавшись до сервера SQL. Этот параметр не регулирует время сетевых задержек, проблем с DNS или другие проблемы.

READ ALSO
Изменение значения внутри строки

Изменение значения внутри строки

Есть ли способ изменить значение внутри строки не переводя её в массив символов? Например "Машинная сила" в "Машинная пила"

248
C# + Access запись и чтение массива байт

C# + Access запись и чтение массива байт

Имеется программа которая шифрует пароли с помощью AESЭтот алгоритм шифрования использует массивы байт

232
Десериализация JSON в LiteDB

Десериализация JSON в LiteDB

В проекте нужно из JSON-строки получить экземпляр некоторого класса, используя библиотеку LiteDBJSON:

1185
Emgu C# [Unable to read from webcam c# emgu]

Emgu C# [Unable to read from webcam c# emgu]

Нашел на GitHub'e пример с использованием Emgu на C# (RedballTracker)Решил испытать этот пример, изучив код (учусь работать с Emgu)

298