예제 #1
0
    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;
        }
    }
예제 #2
0
        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;
            }
        }