Ejemplo n.º 1
0
 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();
     }
 }
Ejemplo n.º 2
0
        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- ")}");
                }
            }
        }