實體框架6中的流暢Api不兼容實體框架核心

asp.net-core c# ef-fluent-api entity-framework entity-framework-core

我使用Entity Framework 6實現了Fluent API。使用EnityFrameworkCore實現相同時遇到問題。

下面是使用EntityFramework 6的Fluent API的代碼

 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");
                });


        }

我在EntityFrameworkCore中遇到的問題是

  1. 它在CustomerConfiguration()中識別ToTable和Property關鍵字
  2. 它在OnModelCreating方法中識別出Configurations,HasRequired,MapLeftKey,MapRightKey,ToTable關鍵字

有人可以告訴我如何使用EntityFrameWork Core中的Fluent API實現這一目標

一般承認的答案

EF核心使用完全不同的API。所以你必須先學習它。

作為一個例子:這是它設置ToTable()

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

要了解您必須閱讀以下鏈接:

表映射

關係

創建模型

要在類中封裝實體類型的配置:

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>());
        }
    }
}

您可以在此處查看更多詳細信息(請參閱由@rowanmiller編輯的第一篇文章: Github


熱門答案

直接鏈接到表maping文檔。閱讀其餘部分。 EF核心是一種新產品,不是對EF6的升級。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow