NpgsqlConnection OpenAndMapComposite <T>(T composite, string?schema, string nameSuffix, out string nameQualified) where T : IComposite { var nameTranslator = new NpgsqlSnakeCaseNameTranslator(); var name = nameTranslator.TranslateTypeName(typeof(T).Name + nameSuffix); if (schema == null) { nameQualified = name; } else { schema = nameTranslator.TranslateTypeName(schema); nameQualified = schema + "." + name; } var connection = OpenConnection(); try { connection.ExecuteNonQuery(schema is null ? $"DROP TYPE IF EXISTS {name}" : $"DROP SCHEMA IF EXISTS {schema} CASCADE; CREATE SCHEMA {schema}"); connection.ExecuteNonQuery($"CREATE TYPE {nameQualified} AS ({composite.GetAttributes()})"); connection.ReloadTypes(); connection.TypeMapper.MapComposite <T>(nameQualified, nameTranslator); return(connection); } catch { connection.Dispose(); throw; } }
public static IQueryable <TEntity> FromView <TEntity>(this DbSet <TEntity> dbSet, string viewName) where TEntity : class { var mapper = new NpgsqlSnakeCaseNameTranslator(); return(dbSet.FromSql($"select * from {mapper.TranslateTypeName(viewName)}")); }
public static void ApplyToModelBuilder(DatabaseFacade databaseFacade, ModelBuilder modelBuilder) { switch (DbProvider) { case DbProvider.SqlServer: break; case DbProvider.Sqlite: default: var mapper = new NpgsqlSnakeCaseNameTranslator(); foreach (var entity in modelBuilder.Model.GetEntityTypes()) { foreach (var property in entity.GetProperties()) { var storeObjectIdentifier = StoreObjectIdentifier.Create(property.DeclaringEntityType, StoreObjectType.Table); if (storeObjectIdentifier.HasValue) { property.SetColumnName(mapper.TranslateMemberName(property.GetColumnName(storeObjectIdentifier.Value))); } } entity.SetTableName(mapper.TranslateTypeName(entity.GetTableName())); } break; } }
public static void ApplyToModelBuilder(DatabaseFacade databaseFacade, ModelBuilder modelBuilder) { switch (DbProvider) { case DbProvider.SqlServer: break; case DbProvider.Sqlite: default: var mapper = new NpgsqlSnakeCaseNameTranslator(); foreach (var entity in modelBuilder.Model.GetEntityTypes()) { foreach (var property in entity.GetProperties()) { property.SetColumnName(mapper.TranslateMemberName(property.GetColumnName())); } entity.SetTableName(mapper.TranslateTypeName(entity.GetTableName())); } break; } }