ClickHouse / ClickHouse/ClickHouse.EntityFrameworkCore

Feature Request: Add Support for EFCore Schemas by Treating Them as Databases

Abierto
#22 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C#
Estrellas
23
Forks
7
Merge medio
14 d 3 h
PR fusionados (30 d)
1

Descripción

### Feature Request

EFCore Entity Schemas can be treated like Clickhouse Databases to make EFCore output valid migrations.
In this feature request I propose a change to how Schemas are handled. I will be submitting a pull request along with my feature request.

### Current behavior

Defining an EFCore Entity Configuration such that:

```
e.ToTable("my_table", "my_schema", table =>
{
table.HasMergeTreeEngine()
.WithOrderBy("Timestamp")
.WithPartitionBy("toYear(Timestamp)");
});

e.Property(x => x.Timestamp)
.HasColumnType("Date")
.HasColumnName("Timestamp");
e.Property(x => x.MyString)
.HasColumnType("String")
.HasColumnName("MyString");
e.HasNoKey();
```

and using that entity configuration in an EFCore migration produces the following migration code:

```
migrationBuilder.EnsureSchema(
name: "my_schema");

migrationBuilder.CreateTable(
name: "my_table",
schema: "my_schema",
columns: table => new
{
Timestamp = table.Column(type: "Date32", nullable: false)
},
constraints: table =>
{
})
.Annotation("ClickHouse:Engine", "MergeTree")
.Annotation("ClickHouse:OrderBy", new[] { "Timestamp" })
.Annotation("ClickHouse:PartitionBy", new[] { "toYear(Timestamp)" });

```

Which fails on the ensure schema operation, saying schemas are not supported. This makes it difficult define database structure in EFCore.

### Expected behavior

```
// C# EFCore Migration
migrationBuilder.EnsureSchema(
name: "pre_aggregates");

migrationBuilder.CreateTable(
name: "my_table",
schema: "my_schema",
columns: table => new
{
Timestamp = table.Column(type: "Date32", nullable: false)
MyString = table.Column(type: "String", nullable: false),

},
constraints: table =>
{
})
.Annotation("ClickHouse:Engine", "MergeTree")
.Annotation("ClickHouse:OrderBy", new[] { "Timestamp" })
.Annotation("ClickHouse:PartitionBy", new[] { "toYear(Timestamp)" });
```

// Should translate to:
```
CREATE DATABASE my_schema;

CREATE TABLE `my_schema`.`my_table` (
`Timestamp` Date32,
`MyString` String
)
ENGINE = MergeTree()
ORDER BY (`Timestamp`)
PARTITION BY toYear(Timestamp);
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.