EF核心-SQL Server映射表“一对多”关系的问题

时间:2020-10-29 18:30:22

标签: c# sql-server entity-framework-core

我在SQL Server中有两个表(categoriessubcategories),我尝试映射这些表以用于Web服务。

表格:类别

id_category | category name        
------------+----------------
1             Technology
2             Sport
3             Furniture

表格:子类别

id_subcategory | subcategory_name | id_category
---------------+------------------+-------------
1                Smartphones        1
2                Smart_TV           1
3                Tablets            1
4                sport_gear         2
. 
. 
.

使用Entity Framework Core 3.1,我将这些实体映射为两个类

[Table("categories", Schema = "Dbo")]
public class Category
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("id_category")]
    public int Id_category { get; set; }

    [Column("category name")]
    public string Name_category { get; set; }

    [NotMapped]
    public ICollection<SubCategory> Subcategories { get; set; }
}

[Table("subcategories", Schema = "Dbo")]
public class SubCategoria
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("id_subcategory")]
    public int Id_subcategory { get; set; }

    [Column("subcategory_name")]
    public string Name_subcat { get; set; }

    [NotMapped]
    public Category Category { get; set; }

    [ForeignKey("Category")]
    [Column("id_category")]
    public int Id_cat { get; set; }
}

这是我的DbContext

public class DataContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<Category>()
            .HasMany(c => c.Subcategories)
            .WithOne(s => s.Category);
    }

    public DbSet<Category> categories { get; set; }
    public DbSet<SubCategory> subcategories { get; set; }
}

问题在于何时需要类别及其子类别

    [HttpGet]
    public IActionResult Get()
    {
       return Ok(_context.categories.Include(x => x.Subcategories).ToList());
    }

我收到此错误消息:

无效的列名'CategoryId_category'
无效的列名“ CategoryId_category”

System.Exception {Microsoft.Data.SqlClient.SqlException}

1 个答案:

答案 0 :(得分:0)

解决方案基于DataContext配置

public class DataContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
         base.OnModelCreating(builder);

         builder.Entity<SubCategory>()
                .HasOne<Category>(s => s.Category)
                .WithMany(c => c.Subcategories)
                .HasForeignKey(s => s.Id_cat);
    }
}