We are wanting to do some testing for an application where Analytical performance is critical. Given we are using EFCore already, we wanted to do some testing with ClickHouse, and your library to benchmark the performance difference between Postgres (current DB), and ClickHouse.
However, I am unable to get a working example running when using non-scalar (multidimensional) classes. We are not doing anything fancy in this test project, other than attempting to save some data, and query it back.
Painting you a picture:
I have a simple class tree Patient that looks like this:
public class Patient {
public Guid Id { get; set; }
public PatientData Data { get; set; } = new();
}
public class PatientData {
public string Name { get; set; } = string.Empty;
public Medication List<Medication> Medications { get; set; } = new List<Medication>();
}
public class Medication {
public string Name { get; set; } = string.Empty;
}
My OnModelCreating looks like this:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var builder = modelBuilder.Entity<Patient>();
builder
.OwnsOne(
p => p.Data,
builder =>
{
builder.OwnsMany(p => p.Medications);
}
)
.HasKey(p => p.Id);
builder.ToTable(table => table.HasMergeTreeEngine().WithPrimaryKey(nameof(Patient.Id)));
}
The problem:
If I add Patients that do not contain any Medications (Empty List), and call SaveChangesAsync on the context, then all works as expected, and I can query the Patients.
However if I do add Patients containing Medications, then I recieve the following error on SaveChangesAsync:
ClickHouseServerException: Code: 27. DB::Exception: Cannot parse input: expected '(' before: 'RETURNING "Id";\r\n': at row 1: While executing ValuesBlockInputFormat. (CANNOT_PARSE_INPUT_ASSERTION_FAILED) (version 25.2.2.39 (official build))
Important Information:
- I am running
clickhouse:latest in Docker
- I have created an initial migration, and run
dotnet ef database update
We are wanting to do some testing for an application where Analytical performance is critical. Given we are using EFCore already, we wanted to do some testing with
ClickHouse, and your library to benchmark the performance difference between Postgres (current DB), and ClickHouse.However, I am unable to get a working example running when using non-scalar (multidimensional) classes. We are not doing anything fancy in this test project, other than attempting to save some data, and query it back.
Painting you a picture:
I have a simple class tree
Patientthat looks like this:My
OnModelCreatinglooks like this:The problem:
If I add Patients that do not contain any
Medications(Empty List), and callSaveChangesAsyncon the context, then all works as expected, and I can query the Patients.However if I do add Patients containing
Medications, then I recieve the following error onSaveChangesAsync:ClickHouseServerException: Code: 27. DB::Exception: Cannot parse input: expected '(' before: 'RETURNING "Id";\r\n': at row 1: While executing ValuesBlockInputFormat. (CANNOT_PARSE_INPUT_ASSERTION_FAILED) (version 25.2.2.39 (official build))Important Information:
clickhouse:latestin Dockerdotnet ef database update