Pages

Sunday, June 3, 2018

Entityframework 6.2 Model Confuguration / Seed Initializer

Install package

  • Install-Package EntityFramework

Create Model Class

    public class Seed
    {
        public Guid SeedId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Link { get; set; }
        public Germination Germination { get; set; }
        public string Supplier { get; set; }
        public int Count { get; set; }
        public decimal Price { get; set; }

        public ICollection<Order> Orders { get; set; }
    }

    public class Order
    {
        public Guid OrderId { get; set; }
        public decimal Shipping { get; set; }
        public decimal Tax { get; set; }
        public Seed Seed { get; set; }

    }
Create DbContext Class

    public interface IYooperGreensDbContext
    {
        DbSet<Seed> Seeds { get; set; }
        DbSet<Order> Orders { get; set; }

    }

    public class YooperGreensDbContext : DbContext, IYooperGreensDbContext
    {
        public YooperGreensDbContext()
            :base("yoopergreens")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            ModelConfiguration configuration = new ModelConfiguration();

            modelBuilder.Configurations.Add(configuration.Seed);
            modelBuilder.Configurations.Add(configuration.Order);

        }
        public DbSet<Seed> Seeds { get; set; }
        public DbSet<Order> Orders { get; set; }
    }

Create Configuration Classes for each model class

    public class OrderConfiguration: EntityTypeConfiguration<Order>
    {
        public OrderConfiguration()
        {
            HasKey(o => o.OrderId);
            HasRequired(o => o.Seed).WithMany(o => o.Orders);
        }
    }

    public class SeedConfiguration : EntityTypeConfiguration<Seed>
    {
        public SeedConfiguration()
        {
            HasKey(s => s.SeedId);
        }
    }

Create Centralized Configuration file

     public class ModelConfiguration
    {
        public SeedConfiguration Seed { get { return new SeedConfiguration(); } }
        public OrderConfiguration Order { get { return new OrderConfiguration(); } }
    }

Create a custom DB initializer to seed data into database:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseIfModelChanges
  • DropCreateDatabaseAlways


    public class YooperGreensDbInitializer : DropCreateDatabaseAlways<YooperGreensDbContext>
    {
        public YooperGreensDbInitializer()
        {
        }

        protected override void Seed(YooperGreensDbContext context)
        {

            IList<Seed> seeds = new List<Seed>
            {
                new Seed {}
            };

            context.Seeds.AddRange(seeds);

            base.Seed(context);
        }
    }

Set this DB initializer class in context class's constructor


        public YooperGreensDbContext()
            :base("yoopergreens")
        {
            Database.SetInitializer(new YooperGreensDbInitializer());

            Configuration.ProxyCreationEnabled = false;

        }

File Structure



This post is for the purpose of my notes only and sometimes a rant.
“I invented nothing new. I simply assembled the discoveries of other men behind whom were centuries of work. Had I worked fifty or ten or even five years before, I would have failed. So it is with every new thing. Progress happens when all the factors that make for it are ready and then it is inevitable. To teach that a comparatively few men are responsible for the greatest forward steps of mankind is the worst sort of nonsense.”
Henry Ford

No comments:

Post a Comment