ClickHouse / ClickHouse/ClickHouse.EntityFrameworkCore
Feature Request: Add Support for EFCore Schemas by Treating Them as Databases
- Dominant language
- C#
- Stars
- 23
- Forks
- 7
- Avg merge
- 14d 3h
- Merged PRs (30d)
- 1
Description
### 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);
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.