quarta-feira, 6 de novembro de 2013

Entity Framework : registrando todos os EntityTypeConfigurations


        protected void RegistraDbMapsDinamicamente(DbModelBuilder modelBuilder)
        {
            var registerMethod = modelBuilder.Configurations.GetType().GetMethods().Single(m => m.Name == "Add" && m.GetGenericArguments().Any(a => a.Name == "TEntityType"));
            
            //// recupera todos os DbMappings que heram de EntityTypeConfiguration.
            var dbMapTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
                             where t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition().IsAssignableFrom(typeof(EntityTypeConfiguration<>))
                             select t;

            // registra os dbMaps encontrados.
            foreach(var dbMapType in dbMapTypes) {
                var entityType = dbMapType.BaseType.GenericTypeArguments.Single();
                var typeConfig = Activator.CreateInstance(dbMapType);

                registerMethod.MakeGenericMethod(new [] {entityType }).Invoke(modelBuilder.Configurations, new[] { typeConfig });
            }

        }

Nenhum comentário: