Quantcast
Channel: Development With A Dot
Viewing all articles
Browse latest Browse all 404

Entity Framework Code First Table Splitting

$
0
0

Since Entity Framework does not support lazy scalar properties, only lazy references and collections, in order to avoid automatic loading of columns with large contents – BLOBs or CLOBs – we can use a technique called table splitting. In a nutshell, this means using multiple entities to store the columns of a table, say, one for the core, and another for the heavy columns.

Let’s say we have the following class model:

image

The code might look like this, using mapping attributes:

   1: [Table("Core")]
   2:publicclass Detail
   3: {
   4:     [Key]
   5:     [ForeignKey("Core")]
   6:public Int32 CoreId
   7:     {
   8:         get;
   9:         set;
  10:     }
  11:  
  12:     [Required]
  13:public Core Core
  14:     {
  15:         get;
  16:         set;
  17:     }
  18:  
  19:public String HeavyProperty
  20:     {
  21:         get;
  22:         set;
  23:     }
  24: }
  25:  
  26:publicclass Core
  27: {
  28:public Int32 CoreId
  29:     {
  30:         get;
  31:         set;
  32:     }
  33:  
  34:public Int32 RegularProperty
  35:     {
  36:         get;
  37:         set;
  38:     }
  39:  
  40:     [Required]
  41:publicvirtual Detail Detail
  42:     {
  43:         get;
  44:         set;
  45:     }
  46: }

It can also be configured with fluent mapping:

   1:protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder)
   2: {
   3:     modelBuilder.Entity<Core>().HasRequired(p => p.Detail).WithRequiredPrincipal(a => a.Core);
   4:     modelBuilder.Entity<Detail>().HasRequired(p => p.Core).WithRequiredPrincipal(a => a.Detail);
   5:     modelBuilder.Entity<Detail>().ToTable("Core");    
   6:  
   7:base.OnModelCreating(modelBuilder);
   8: }

You will notice that both properties need to be marked as required, this is a requirement for table splitting in EFCF. The Detail property is naturally lazy loaded and so is the HeavyProperty.


Viewing all articles
Browse latest Browse all 404

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>