OnModel创建实体框架核心

Ale*_*xGH 5 c# asp.net-mvc entity-framework asp.net-core

这段代码位于MVC,我需要做类似的事情,但是在ASP.net Core, usingEntity Framework Core或 with DataAnnotations(我已经将参数从 更改DbModelBuilder(MVC Entity Framework)ModelBuilder(Entity Framework Core)

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); //error: Conventions is not recognized
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<tbl_Line>()
                .HasMany(d => d.tbl_Policy)
                .WithRequired(c => c.tbl_Line) //error WithRequired not recognized
                .HasForeignKey(c => c.int_lineID);
        }
Run Code Online (Sandbox Code Playgroud)

当我尝试在以下位置使用它时出现一些错误Entity Framework Core

1-'ModelBuilder' does not contain a definition for 'Conventions' and no extension method 'Conventions' accepting a first argument of type 'ModelBuilder' could be found (are you missing a using directive or an assembly reference?)

2-'CollectionNavigationBuilder<tbl_Line, tbl_Policy>' does not contain a definition for 'WithRequired' and no extension method 'WithRequired' accepting a first argument of type 'CollectionNavigationBuilder<tbl_Line, tbl_Policy>' could be found (are you missing a using directive or an assembly reference?)

Nei*_*ski 2

在支持ModelBuilder.Configurations之前,我使用扩展方法模拟旧的实体框架构造:

public static EntityTypeBuilder<Project> Map(this EntityTypeBuilder<Project> cfg)
{
    cfg.ToTable("sql_Projects");

    // Primary Key
    cfg.HasKey(p => p.Id);

    cfg.Property(p => p.Id)
        .IsRequired()
        .HasColumnName("ProjectId");

    return cfg;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样从OnModelCreating调用它......

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Project>().Map();
    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)

我认为,这有点笨拙,但比尝试在主 DbContext 中配置数十个实体更干净。