question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Postgresql slow with Entity Framework Core

See original GitHub issue

I’m trying to use Postgresql with Entity Framework Core. But I have problem with performance.

When I simply call the same SQL directly to Postgresql it runs in 1 ms, but in Entity Framework runs in ~120 ms. So, it is 120 times slower.

Here is an example query

      SELECT COUNT(*)::INT
      FROM "Campaign" AS x
      WHERE x."UserId" = 3

This SQL query runs in 1 ms.

Here is Entity Framework Core debug result for the same query, it takes 133 ms

    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (133ms) [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
      SELECT COUNT(*)::INT
      FROM "Campaign" AS x
      WHERE x."UserId" = @__userId_0

What is wrong here?

    info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
          Entity Framework Core 2.2.0-rtm-35687 initialized 'PostgreSqlContext' using provider 'Npgsql.EntityFrameworkCore.PostgreSQL' with options: None
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__ipNumber_0='?' (DbType = Double)], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CityName", x."CountryCode", x."CountryName", x."IpFrom", x."IpTo", x."RegionName"
          FROM "IpLocation" AS x
          WHERE (@__ipNumber_0 > x."IpFrom") AND (@__ipNumber_0 < x."IpTo")
          LIMIT 1
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (133ms) [Parameters=[@__ipNumber_0='?' (DbType = Double)], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CityName", x."CountryCode", x."CountryName", x."IpFrom", x."IpTo", x."RegionName"
          FROM "IpLocation" AS x
          WHERE (@__ipNumber_0 > x."IpFrom") AND (@__ipNumber_0 < x."IpTo")
          LIMIT 1
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'IpLocation' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__id_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."ApiToken", x."BirthDate", x."CountryId", x."CreatedAt", x."DeletedAt", x."Email", x."EmailVerify", x."FacebookId", x."GoogleId", x."Image", x."InvoicePaymentFailCount", x."LastLoginAt", x."LoginErrorCount", x."Name", x."Password", x."PaymentStatus", x."PlanId", x."ResetPasswordToken", x."SelectedLanguageCode", x."ShopifyToken", x."Status", x."StripeId", x."Surname", x."Type", x."UpdatedAt"
          FROM "User" AS x
          WHERE x."Id" = @__id_0
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (134ms) [Parameters=[@__id_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."ApiToken", x."BirthDate", x."CountryId", x."CreatedAt", x."DeletedAt", x."Email", x."EmailVerify", x."FacebookId", x."GoogleId", x."Image", x."InvoicePaymentFailCount", x."LastLoginAt", x."LoginErrorCount", x."Name", x."Password", x."PaymentStatus", x."PlanId", x."ResetPasswordToken", x."SelectedLanguageCode", x."ShopifyToken", x."Status", x."StripeId", x."Surname", x."Type", x."UpdatedAt"
          FROM "User" AS x
          WHERE x."Id" = @__id_0
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'User' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__get_Item_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT e."Id", e."CreatedAt", e."DeletedAt", e."Description", e."DisplayCount", e."ImpressionCount", e."InteractionCount", e."Name", e."PopupCount", e."Price", e."StripeId", e."Type", e."UpdatedAt"
          FROM "Plan" AS e
          WHERE e."Id" = @__get_Item_0
          LIMIT 1
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (134ms) [Parameters=[@__get_Item_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT e."Id", e."CreatedAt", e."DeletedAt", e."Description", e."DisplayCount", e."ImpressionCount", e."InteractionCount", e."Name", e."PopupCount", e."Price", e."StripeId", e."Type", e."UpdatedAt"
          FROM "Plan" AS e
          WHERE e."Id" = @__get_Item_0
          LIMIT 1
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'Plan' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT COUNT(*)::INT
          FROM "Campaign" AS x
          WHERE x."UserId" = @__userId_0
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (133ms) [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          SELECT COUNT(*)::INT
          FROM "Campaign" AS x
          WHERE x."UserId" = @__userId_0
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__userId_0='?' (DbType = Int32), @__startDate_1='?' (DbType = DateTime), @__endDate_2='?' (DbType = DateTime)], CommandType='Text', CommandTimeout='30']
          SELECT COUNT(*)::INT
          FROM "Impression" AS x
          WHERE ((x."UserId" = @__userId_0) AND (x."CreatedAt" > @__startDate_1)) AND (x."CreatedAt" < @__endDate_2)
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (134ms) [Parameters=[@__userId_0='?' (DbType = Int32), @__startDate_1='?' (DbType = DateTime), @__endDate_2='?' (DbType = DateTime)], CommandType='Text', CommandTimeout='30']
          SELECT COUNT(*)::INT
          FROM "Impression" AS x
          WHERE ((x."UserId" = @__userId_0) AND (x."CreatedAt" > @__startDate_1)) AND (x."CreatedAt" < @__endDate_2)
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__userId_0='?' (DbType = Int32), @__domain_1='?', @__Replace_2='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CampaignGoalId", x."CreatedAt", x."DeletedAt", x."JsonData", x."Name", x."Status", x."UpdatedAt", x."UserId"
          FROM "Campaign" AS x
          WHERE ((x."UserId" = @__userId_0) AND (x."Status" = TRUE)) AND EXISTS (
              SELECT 1
              FROM "CampaignDomainRelation" AS y
              INNER JOIN "Domain" AS "y.Domain" ON y."DomainId" = "y.Domain"."Id"
              WHERE ((("y.Domain"."Url" = @__domain_1) OR ((('www.' || "y.Domain"."Url")) = @__domain_1)) OR ("y.Domain"."Url" = @__Replace_2)) AND (x."Id" = y."CampaignId"))
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (134ms) [Parameters=[@__userId_0='?' (DbType = Int32), @__domain_1='?', @__Replace_2='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CampaignGoalId", x."CreatedAt", x."DeletedAt", x."JsonData", x."Name", x."Status", x."UpdatedAt", x."UserId"
          FROM "Campaign" AS x
          WHERE ((x."UserId" = @__userId_0) AND (x."Status" = TRUE)) AND EXISTS (
              SELECT 1
              FROM "CampaignDomainRelation" AS y
              INNER JOIN "Domain" AS "y.Domain" ON y."DomainId" = "y.Domain"."Id"
              WHERE ((("y.Domain"."Url" = @__domain_1) OR ((('www.' || "y.Domain"."Url")) = @__domain_1)) OR ("y.Domain"."Url" = @__Replace_2)) AND (x."Id" = y."CampaignId"))
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'Campaign' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__8__locals1_location_CountryCode_0='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."Code", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "Country" AS x
          WHERE x."Code" = @__8__locals1_location_CountryCode_0
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (132ms) [Parameters=[@__8__locals1_location_CountryCode_0='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."Code", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "Country" AS x
          WHERE x."Code" = @__8__locals1_location_CountryCode_0
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'Country' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__country_Id_0='?' (DbType = Int32), @__8__locals1_location_RegionName_1='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CountryId", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "City" AS x
          WHERE (x."CountryId" = @__country_Id_0) AND (x."Name" = @__8__locals1_location_RegionName_1)
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (133ms) [Parameters=[@__country_Id_0='?' (DbType = Int32), @__8__locals1_location_RegionName_1='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."CountryId", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "City" AS x
          WHERE (x."CountryId" = @__country_Id_0) AND (x."Name" = @__8__locals1_location_RegionName_1)
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'City' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@__countryCode_0='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."Code", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "Country" AS x
          WHERE x."Code" = @__countryCode_0
          LIMIT 1
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (132ms) [Parameters=[@__countryCode_0='?'], CommandType='Text', CommandTimeout='30']
          SELECT x."Id", x."Code", x."CreatedAt", x."DeletedAt", x."Name", x."UpdatedAt"
          FROM "Country" AS x
          WHERE x."Code" = @__countryCode_0
          LIMIT 1
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10808]
          'PostgreSqlContext' generated a temporary value for the 'Id' property of new 'Impression' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10806]
          Context 'PostgreSqlContext' started tracking 'Impression' entity. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10800]
          DetectChanges starting for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10801]
          DetectChanges completed for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10800]
          DetectChanges starting for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10801]
          DetectChanges completed for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10800]
          DetectChanges starting for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10801]
          DetectChanges completed for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.Update[10004]
          SaveChanges starting for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10800]
          DetectChanges starting for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10801]
          DetectChanges completed for 'PostgreSqlContext'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
          Opening connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
          Opened connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20200]
          Beginning transaction with isolation level 'ReadCommitted'.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
          Executing DbCommand [Parameters=[@p0='?' (DbType = Int32), @p1='?' (DbType = Int32), @p2='?' (DbType = DateTime), @p3='?' (DbType = DateTime), @p4='?', @p5='?' (DbType = DateTime), @p6='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          INSERT INTO "Impression" ("CampaignId", "CountryId", "CreatedAt", "DeletedAt", "SessionId", "UpdatedAt", "UserId")
          VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)
          RETURNING "Id";
    info: Microsoft.EntityFrameworkCore.Database.Command[20101]
          Executed DbCommand (133ms) [Parameters=[@p0='?' (DbType = Int32), @p1='?' (DbType = Int32), @p2='?' (DbType = DateTime), @p3='?' (DbType = DateTime), @p4='?', @p5='?' (DbType = DateTime), @p6='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
          INSERT INTO "Impression" ("CampaignId", "CountryId", "CreatedAt", "DeletedAt", "SessionId", "UpdatedAt", "UserId")
          VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)
          RETURNING "Id";
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10803]
          Foreign key property 'Impression.Id' detected as changed. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see property values.
    dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
          A data reader was disposed.
    dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20202]
          Committing transaction.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
          Closing connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
          Closed connection to database 'postgres' on server 'tcp://my-db-connection'.
    dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20204]
          Disposing transaction.
    dbug: Microsoft.EntityFrameworkCore.ChangeTracking[10807]
          An 'Impression' entity tracked by 'PostgreSqlContext' changed from 'Added' to 'Unchanged'. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see key values.
    dbug: Microsoft.EntityFrameworkCore.Update[10005]
          SaveChanges completed for 'PostgreSqlContext' with 1 entities written to the database.
    dbug: Microsoft.EntityFrameworkCore.Infrastructure[10407]
          'PostgreSqlContext' disposed.

Here is my Campaign model class:

    using System;
    using System.Collections.Generic;
    
    namespace Model.Models
    {
        public partial class Campaign
        {
            public Campaign()
            {
                CampaignDomainRelation = new HashSet<CampaignDomainRelation>();
                CampaignFormData = new HashSet<CampaignFormData>();
                Display = new HashSet<Display>();
                Domain = new HashSet<Domain>();
                Impression = new HashSet<Impression>();
                Interaction = new HashSet<Interaction>();
            }
    
            public int Id { get; set; }
            public int? UserId { get; set; }
            public string Name { get; set; }
            public int? CampaignGoalId { get; set; }
            public string JsonData { get; set; }
            public bool? Status { get; set; }
            public DateTime? CreatedAt { get; set; }
            public DateTime? UpdatedAt { get; set; }
            public DateTime? DeletedAt { get; set; }
    
            public virtual CampaignGoal CampaignGoal { get; set; }
            public virtual User User { get; set; }
            public virtual ICollection<CampaignDomainRelation> CampaignDomainRelation { get; set; }
            public virtual ICollection<CampaignFormData> CampaignFormData { get; set; }
            public virtual ICollection<Display> Display { get; set; }
            public virtual ICollection<Domain> Domain { get; set; }
            public virtual ICollection<Impression> Impression { get; set; }
            public virtual ICollection<Interaction> Interaction { get; set; }
        }
    }

Here is my jsporj file :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.0" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.2.0" />
  </ItemGroup>

</Project>

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:17 (7 by maintainers)

github_iconTop GitHub Comments

2reactions
kervanaslancommented, Jul 21, 2020

For anyone arriving here, Npgsql really is just a PostgreSQL client - it opens a TCP connection to your PostgreSQL server just like any other driver would (or psql); as a general rule, this makes it very unlikely for Npgsql to be the cause of consistent and significant query slowdown. When comparing Npgsql perf against any other client, carefully check that you’re testing from the same client machine, and connecting to the same server (PostgreSQL) machine.

Yes, this is right. It is not about npgsql. My experience was about multi regional purpose. So, npgsql was slow as the other clients.

1reaction
rojicommented, Jul 21, 2020

For anyone arriving here, Npgsql really is just a PostgreSQL client - it opens a TCP connection to your PostgreSQL server just like any other driver would (or psql); as a general rule, this makes it very unlikely for Npgsql to be the cause of consistent and significant query slowdown. When comparing Npgsql perf against any other client, carefully check that you’re testing from the same client machine, and connecting to the same server (PostgreSQL) machine.

Read more comments on GitHub >

github_iconTop Results From Across the Web

c# - Npgsql EF Core (.NET 6) is extremely slow ...
There is a problem with queries to existing Postgres database using Npgsql EF Core (.NET 6). Even simple EF queries are extremely slow...
Read more >
Performance benchmarks of PostgreSQL .NET with Npgsql ...
Entity Framework Core is 1.5 times slower than the other methods. Not that it's very slow by user perception standards. The operations are ......
Read more >
Efficient Querying - EF Core
Performance guide for efficient querying using Entity Framework Core.
Read more >
Three ways to improve the EF Core performance in your . ...
In this article, I'm going to describe the three most straightforward approaches to increase the performance of Entity Framework Core (EF Core) operations ......
Read more >
Performance Diagnosis - EF Core
Identifying slow database commands via logging. At the end of the day, EF prepares and executes commands to be executed against your database; ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found