...

Проверка взаимоотношения, завершено ли оно

Тема в разделе "Разработчикам", создана пользователем alexfuse, 13 дек 2018.

  1. alexfuse

    alexfuse Member

    Имеется такой код
    Код:
    if (context.Vozmozhnostj.Relationships.Count > 0) {
                        var rel = context.Vozmozhnostj.Relationships.Where (x => x.Completed == false);
                        if (rel != null)
                        {
                            if (rel.Count() > 1)
                            {
                               код
                            }
                            else if (rel.Count() == 1)
                            {
                               код
                             
                            }
                           код
                        }
                    }
    почему ( context.Vozmozhnostj.Relationships.Where (x => x.Completed == false)) находит взаимоотношение, если оно уже завершено?
     
  2. pushkarev

    pushkarev Active Member

    По идее не должны находиться закрытые взаимоотношения, похоже что есть какая-то ошибка в базе. Возможно взаимоотношение было как-то некорректно завершено. А может оно и не было завершено, а просто было удалено, можете показать историю действий по этому взаимоотношению?
    А вообще смущает критерий поиска, я бы рекомендовал использовать конструкцию:
    Код:
    var rel = context.Vozmozhnostj.Relationships.Where (x => x.Completed != true);
    На сколько мне известно поле Completed при создании взаимоотношения имеет значение null, поэтому вы не найдете большую часть открытых взаимоотношений. Может быть ошибаюсь, не перепроверял, но по моему есть такая особенность.
     
  3. alexfuse

    alexfuse Member

    Прикрепил скриншот

    логи во время проверки
    24.11.2018 21:44:18
    Проверка на неактивность
    Найдено активное взаимоотношение
    Последнее изменение не более 14 дней


    если поле может быть null, то по идеи надо дополнить условие
    Код:
    var rel = context.Vozmozhnostj.Relationships.Where (x => x.Completed != true && x.Completed != null);
     

    Вложения:

  4. akarimov

    akarimov Member

    А какая из секций кода отрабатывает? Где rel.Count()==1?
    Если отрабатывает та секция где rel !=null то это так и должно быть функция Where не возвращает null (и проверка эта не нужна)
    Если отрабатывает секция где Count()==1 тогда посмотрите что в базе хранится запросом
    Код:
    SELECT * FROM [dbo].[Relationship] Where Id=ИДВзаимоотношения
     
  5. alexfuse

    alexfuse Member

    Хорошо, спасибо.
    Да, в данном случае эта секция отрабатывает
     

    Вложения:

  6. akarimov

    akarimov Member

    Тогда, если исключать всякие чудеса (типа закешировался ответ неверный, но я такого ни разу не видел, поэтому не рассматриваю особо),приходит на ум следующее
    В context.Vozmozhnostj.Relationships возможностей больше одной, из которых одна незавершена, другая которую приводите в пример завершена. Соотв. надо смотреть код внутри секции которая отрабатывает, может она неверную ссылку выбирает? Ну и смотреть сам контекст из которого это прилетело. Например могли в тестовых целях захардкодить Id взаимоотношения, а потом забыли поменять на параметр.
     
  7. akarimov

    akarimov Member

    Вот код который позволит глянуть все свойства взаимоотношения в той секции в которой не должно быть, и проверить что попадает в отбор (только вместо первого оператора подставить взаимоотношение которое отобралось
    Код:
                var rel = EntityManager<Relationship>.Instance.Load(98381L); //
                Type t = rel.GetType();
                var metadata = (ClassMetadata)InterfaceActivator.LoadMetadata(t, false, true);
                System.Reflection.PropertyInfo[] propInfo = rel.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
                foreach (var pi in propInfo)
                {
                        var value = pi.GetValue(rel, null);
                        Console.Write(pi.Name+ "value =");
                        if (value != null)
                        {
                            Console.WriteLine(value.ToString());
                        }
                        else
                        {
                            Console.WriteLine("NULL");
                        }
                }
     

Поделиться: