10 things you didn't know EF Core can do - Hannes Lowette - NDC Oslo 2024

Discover 10 powerful yet lesser-known Entity Framework Core features, from inheritance strategies to JSON columns and soft deletes. Level up your EF Core skills!

Key takeaways
  • Entity Framework Core supports multiple inheritance strategies:

    • Table per Hierarchy (TPH) with discriminator column
    • Table per Type (TPT) with separate tables
    • Table per Concrete type (TPC)
  • JSON columns can be used to store complex nested objects instead of normalizing them into separate tables

    • Reduces joins and simplifies querying
    • Uses OwnsOne() with JSON serialization
    • Good for nested DTOs and value objects
  • HierarchyID support for modeling tree structures in SQL Server

    • More efficient than self-referencing foreign keys
    • Enables complex tree traversal queries
    • Requires SQL Server.HierarchyId package
  • Many-to-many relationships can be configured without explicitly mapping join tables

    • Simplified syntax with skip navigation
    • Can control join table naming and structure
    • Supports bi-directional navigation
  • Owned types allow modeling complex types without separate tables

    • Can be mapped as JSON or normalized tables
    • Supports collections
    • Automatically loaded with parent entity
  • Compiled queries improve performance by caching query plans

    • Reduces parsing overhead
    • Good for frequently executed queries
    • Supports parameterization
  • Logical/soft deletes can be implemented using shadow properties and global filters

    • Records marked as deleted instead of physically removed
    • Filtered out automatically from queries
    • Configurable through model building
  • DbContext can be used without DbSet properties

    • Model can be built at runtime
    • Useful for plugin architectures
    • Supports dynamic model configuration
  • Batch operations reduce database roundtrips

    • Multiple operations sent in single transaction
    • Configurable batch size (default 42)
    • Improves performance for bulk operations