public static void Initialize([NotNull] string nameOrConnectionString, bool recreateDatabase = false) { using (var context = new PiSensorNetDbContext(nameOrConnectionString, recreateDatabase ? RecreateInitializer : null)) { // ReSharper disable once UnusedVariable var dummy = context.Packets.FirstOrDefault(); } }
public static void CheckCompatibility(string nameOrConnectionString) { using (var context = new PiSensorNetDbContext(nameOrConnectionString, null)) { var tables = Reflector.Instance <PiSensorNetDbContext> .Type .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(i => i.PropertyType.IsGenericType && i.PropertyType.GetGenericTypeDefinition() == typeof(DbSet <>)) .ToList(); var exceptions = new List <string>(tables.Count); var firstOrDefault = typeof(Queryable).GetMethods(BindingFlags.Public | BindingFlags.Static) .Where(i => i.Name.Equals("FirstOrDefault", StringComparison.InvariantCulture) && i.GetParameters().Length == 1) .Single(); foreach (var table in tables) { var entityType = table.PropertyType.GetGenericArguments()[0]; var value = table.GetValue(context); try { firstOrDefault.MakeGenericMethod(entityType).Invoke(null, new[] { value }); } catch (TargetInvocationException e) { var entityCommandExecutionException = e.InnerException as EntityCommandExecutionException; if (entityCommandExecutionException != null) { exceptions.Add(table.Name + ": " + entityCommandExecutionException.InnerException.Message); } else { exceptions.Add(table.Name + ": " + e.InnerException.Message); } } catch (Exception e) { exceptions.Add(table.Name + ": " + e.Message); } } if (exceptions.Count > 0) { throw new NotSupportedException($"Errors found:{Environment.NewLine}\t- {exceptions.Join(Environment.NewLine + "\t- ")}"); } } }