Browse Source

Fix db context configuration.

pull/1330/head
Sebastian Stehle 2 weeks ago
parent
commit
f8fa5a48fe
  1. 10
      backend/src/Squidex.Data.EntityFramework/AppDbContext.cs
  2. 9
      backend/src/Squidex.Data.EntityFramework/ContentDbContext.cs
  3. 8
      backend/src/Squidex.Data.EntityFramework/Infrastructure/Extensions.cs
  4. 12
      backend/src/Squidex.Data.EntityFramework/ServiceExtensions.cs
  5. 2
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/MySqlFixture.cs
  6. 2
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/PostgresFixture.cs
  7. 2
      backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/SqlServerFixture.cs

10
backend/src/Squidex.Data.EntityFramework/AppDbContext.cs

@ -29,16 +29,6 @@ public abstract class AppDbContext(DbContextOptions options, IJsonSerializer jso
{
public abstract SqlDialect Dialect { get; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Almost everything is read only or written by inserting new entities, so tracking would
// only cost a snapshot of every entity that is read. The few stores that update an entity
// they have queried ask for it with AsTracking.
optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder builder)
{
var jsonColumnType = Dialect.JsonColumnType();

9
backend/src/Squidex.Data.EntityFramework/ContentDbContext.cs

@ -19,15 +19,6 @@ public abstract class ContentDbContext(DbContextOptions options, IJsonSerializer
{
public abstract SqlDialect Dialect { get; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Contents are never written by changing a queried entity, they are inserted in bulk, so
// tracking only costs a snapshot of every content that is read.
optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseContent(jsonSerializer, Dialect.JsonColumnType(), options.Prefix());

8
backend/src/Squidex.Data.EntityFramework/Infrastructure/Extensions.cs

@ -54,9 +54,15 @@ public static class Extensions
return options.GetExtension<PrefixExtension>().Prefix;
}
public static DbContextOptionsBuilder SetDefaultWarnings(this DbContextOptionsBuilder builder)
public static DbContextOptionsBuilder SetDefaults(this DbContextOptionsBuilder builder)
{
builder.ConfigureWarnings(w => w.Ignore(CoreEventId.CollectionWithoutComparer));
// Almost everything is read only or written by inserting new entities, so tracking would
// only cost a snapshot of every entity that is read. The few stores that update an entity
// they have queried ask for it with AsTracking. This cannot be done in OnConfiguring,
// because the contexts are pooled and pooling forbids to modify the options there.
builder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
return builder;
}

12
backend/src/Squidex.Data.EntityFramework/ServiceExtensions.cs

@ -82,7 +82,7 @@ public static class ServiceExtensions
services.AddPooledDbContextFactory<MySqlAppDbContext>(builder =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseMySql(connectionString, version, options =>
{
options.UseNetTopologySuite();
@ -93,7 +93,7 @@ public static class ServiceExtensions
services.AddNamedDbContext<MySqlContentDbContext>((builder, name) =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseBulkInsertMySql();
builder.UseMySql(connectionString, version, options =>
{
@ -118,7 +118,7 @@ public static class ServiceExtensions
{
services.AddPooledDbContextFactory<PostgresAppDbContext>(builder =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseBulkInsertPostgreSql();
builder.UseNpgsql(connectionString, options =>
{
@ -128,7 +128,7 @@ public static class ServiceExtensions
services.AddNamedDbContext<PostgresContentDbContext>((builder, name) =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseBulkInsertPostgreSql();
builder.UseNpgsql(connectionString, options =>
{
@ -152,7 +152,7 @@ public static class ServiceExtensions
{
services.AddPooledDbContextFactory<SqlServerAppDbContext>(builder =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseSqlServer(connectionString, options =>
{
options.UseNetTopologySuite();
@ -162,7 +162,7 @@ public static class ServiceExtensions
services.AddNamedDbContext<SqlServerContentDbContext>((builder, name) =>
{
builder.SetDefaultWarnings();
builder.SetDefaults();
builder.UseBulkInsertSqlServer();
builder.UseSqlServer(connectionString, options =>
{

2
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/MySqlFixture.cs

@ -46,6 +46,7 @@ public class MySqlFixture(string? reuseId = null) : IAsyncLifetime, ISqlContentF
new ServiceCollection()
.AddPooledDbContextFactory<TestDbContextMySql>(builder =>
{
builder.SetDefaults();
builder.UseBulkInsertMySql();
builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), options =>
{
@ -55,6 +56,7 @@ public class MySqlFixture(string? reuseId = null) : IAsyncLifetime, ISqlContentF
})
.AddNamedDbContext<MySqlContentDbContext>((builder, name) =>
{
builder.SetDefaults();
builder.UseBulkInsertMySql();
builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), options =>
{

2
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/PostgresFixture.cs

@ -45,6 +45,7 @@ public class PostgresFixture(string? reuseId) : IAsyncLifetime, ISqlContentFixtu
new ServiceCollection()
.AddPooledDbContextFactory<TestDbContextPostgres>(builder =>
{
builder.SetDefaults();
builder.UseBulkInsertPostgreSql();
builder.UseNpgsql(connectionString, options =>
{
@ -53,6 +54,7 @@ public class PostgresFixture(string? reuseId) : IAsyncLifetime, ISqlContentFixtu
})
.AddNamedDbContext<PostgresContentDbContext>((builder, name) =>
{
builder.SetDefaults();
builder.UseBulkInsertPostgreSql();
builder.UseNpgsql(connectionString, options =>
{

2
backend/tests/Squidex.Data.Tests/EntityFramework/TestHelpers/SqlServerFixture.cs

@ -47,6 +47,7 @@ public class SqlServerFixture(string? reuseId = null) : IAsyncLifetime, ISqlCont
new ServiceCollection()
.AddPooledDbContextFactory<TestDbContextSqlServer>(builder =>
{
builder.SetDefaults();
builder.UseBulkInsertSqlServer();
builder.UseSqlServer(connectionString, options =>
{
@ -55,6 +56,7 @@ public class SqlServerFixture(string? reuseId = null) : IAsyncLifetime, ISqlCont
})
.AddNamedDbContext<SqlServerContentDbContext>((builder, name) =>
{
builder.SetDefaults();
builder.UseBulkInsertSqlServer();
builder.UseSqlServer(connectionString, options =>
{

Loading…
Cancel
Save