Blog

Filter posts by Category Or Tag of the Blog section!

Entity Framework Core mapping configuration

Monday, 04 September 2017

Mapping in entity framework core has a little bit different configuration in comparison to the previous version of entity framework. Let's create a mapping for the following class:


 
public class Sail
    {
        public int Id { get; set; }

        public int SailerId { get; set; }

        public decimal Amount { get; set; }
    }

 

You should implement an interface named IEntityTypeConfiguration<T> like below:

  

 public class SailConfiguration : IEntityTypeConfiguration<Sail>

    {

        public void Configure(EntityTypeBuilder<Sail> builder)

        {

            builder.HasKey(c => c.Id);

            builder.Property(c => c.Amount);

            builder.Property(c => c.SailerId);

        }

    }

 

In entity framework core, we don't have ToTable(tableName,schemaName) extension method in configuration anymore! In order to set table name or schema name,  you should call ToTable in Entity<> of ModelBuilder in OnModelCreating() of DbContext derived class:

 

 public class MyDbContext : DbContext

    {

        public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)

        {

        }

 

        protected override void OnModelCreating(ModelBuilder modelBuilder)

        {

            base.OnModelCreating(modelBuilder);

 

            modelBuilder.Entity<Sail>().ToTable("Sail", "MySchema");

            modelBuilder.ApplyConfiguration(new SailConfiguration());

        }

    }

 

I personally would rather create my own extension method over ModelBuilder :

 

 public static class SailConfiguration

    {

        public static ModelBuilder MapSail(this ModelBuilder modelBuilder)

        {

            var entity = modelBuilder.Entity<Sail>();

            entity.ToTable("Saile", "MySchema");

            entity.HasKey(c => c.Id);

            entity.Property(c => c.Amount);

            entity.Property(c => c.SailerId);

            return modelBuilder;

        }

    }

 

And then map it  OnModelCreating():

 

  protected override void OnModelCreating(ModelBuilder modelBuilder)

        {

            base.OnModelCreating(modelBuilder);

 

            modelBuilder.MapSail();

        }

 

comments powered by Disqus