2
votes

I had implemented Fluent API using Entity Framework 6. Have problems when implementing the same using EnityFrameworkCore.

Below is the code using Fluent API using EntityFramework 6

 public class CustomerConfiguration : EntityTypeConfiguration<Customers>
    {
        public CustomerConfiguration()
        {
            ToTable("Customers");
            Property(c => c.FirstName).IsRequired().HasMaxLength(50);
            Property(c => c.LastName).IsRequired().HasMaxLength(50);
            Property(c => c.Gender).IsRequired().HasMaxLength(10);
            Property(c => c.Email).IsRequired().HasMaxLength(25);
            Property(c => c.Address).IsRequired().HasMaxLength(50);
            Property(c => c.City).IsRequired().HasMaxLength(25);
            Property(c => c.State).IsOptional().HasMaxLength(15);

        }
    }


  protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new CustomerConfiguration());
            modelBuilder.Configurations.Add(new OrderConfiguration());
            modelBuilder.Configurations.Add(new ProductConfiguration());

            modelBuilder.Entity<Orders>()
           .HasRequired(c => c.Customers)
           .WithMany(o => o.Orders)
           .HasForeignKey(f => f.CustomerId);

            modelBuilder.Entity<Orders>()
                .HasMany<Products>(s => s.Products)
                .WithMany(c => c.Orders)
                .Map(cs =>
                {
                    cs.MapLeftKey("OrderRefId");
                    cs.MapRightKey("ProductRefId");
                    cs.ToTable("OrderDetails");
                });


        }

The issues that I am getting in EntityFrameworkCore are

  1. It dosent recognize ToTable and Property keywords in CustomerConfiguration()
  2. It dosent recognize Configurations, HasRequired,MapLeftKey,MapRightKey,ToTable keyword in OnModelCreating method

Could somebody tell me how to achieve this using Fluent API in EntityFrameWork Core

2
Look at the EF Core documentation: docs.microsoft.com/en-us/ef/core/modelingErikEJ

2 Answers

5
votes

EF core uses completely different APIs.So you must learn it first.

As an example : This is the way how it sets the ToTable().

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .ToTable("blogs");
    }

To learn you have to read these links :

Table Mapping

Relationships

Creating a Model

To encapsulate the configuration for an entity type in a class :

using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Microsoft.EntityFrameworkCore
{
    public abstract class EntityTypeConfiguration<TEntity>
        where TEntity : class
    {
        public abstract void Map(EntityTypeBuilder<TEntity> builder);
    }

    public static class ModelBuilderExtensions
    {
        public static void AddConfiguration<TEntity>(this ModelBuilder modelBuilder, EntityTypeConfiguration<TEntity> configuration)
            where TEntity : class
        {
            configuration.Map(modelBuilder.Entity<TEntity>());
        }
    }
}

You can see more details here (see the first post which was edited by @rowanmiller : Github

0
votes

direct link to table maping documentation. Read the rest of it as well. EF core is a new product not an upgrade to EF6.