0

У меня есть тонна таблиц, и некоторые запросы предоставляются SQL Views.Как я могу обнаружить, что миграция Entity Framework нарушила мой SQL-просмотр?

То, что я не хочу, это создать кошмар для обслуживания, когда разработчик меняет столбец в коде, в результате чего один или несколько SQL-представлений разбиваются.

Есть ли механизм в EF, чтобы проверить это?

ответ

0

Являются ли виды, отображаемые в EF?
Обычно я запускаю тест конфигурации EF, который проверяет все таблицы.
Я также размещаю основной код, но он работает только в том случае, если первичный ключ содержит одно и только одно свойство с именем Id. Вы можете исправить это с помощью метода FirstOrDefault (вы можете посмотреть здесь, как его называть How do I use reflection to call a generic method?).

[TestMethod] 
public void All() 
{ 

    var properties = typeof (Context).GetProperties().Where(p => IsSubclassOfRawGeneric(typeof(DbSet<>), p.PropertyType)); 

    foreach (PropertyInfo property in properties) 
    { 
     Type entityType = property.PropertyType.GetGenericArguments()[0]; 
     PropertyInfo idProperty = entityType.GetProperty("Id"); 
     if (idProperty == null) 
     { 
      Console.WriteLine("Id property not found. Cannot check type configuration"); 
      continue; 
     } 
     Type idPropertyType = idProperty.PropertyType; 
     DbSet dbSet = _context.Set(entityType); 
     if (idPropertyType == typeof(string)) 
     { 
      try 
      { 
       dbSet.Find("A"); 
      } 
      catch (Exception e) 
      { 
       throw new Exception("Cannot access to DbSet " + property.Name, e); 
      } 
     } 
     else if (idPropertyType == typeof (int)) 
     { 
      try 
      { 
       dbSet.Find(1); 
      } 
      catch (Exception e) 
      { 
       throw new Exception("Cannot access to DbSet " + property.Name, e); 
      } 
     } 
     else 
     { 
      Console.WriteLine("Id property type not supported ('{0}'). Cannot check type configuration", idPropertyType.Name); 
      continue; 
     } 

    } 

} 


static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) 
{ 
    while (toCheck != null && toCheck != typeof(object)) 
    { 
     var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; 
     if (generic == cur) 
     { 
      return true; 
     } 
     toCheck = toCheck.BaseType; 
    } 
    return false; 
} 
0

Нет, не существует. Который идет вниз в длинном списке аргументов, почему первые миграции миграции - это игрушка, а не инструмент.

Сравните это с сохранением базы данных в среде SSDT и вручную создайте сценарии изменения и изменения VALIDATING. Миграции превращаются в «загружать SQL-скрипты и выполнять их» быстрее, как только вы используете какую-либо не базовую функцию (и эти функции полезны).

Итак, нет.

Что вы можете сделать, это выполнить тест на единицу/интеграцию, автоматически проверяющий приложение на последнюю миграцию. Автоматическое тестирование на помощь.

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