访问多对多表

时间:2017-01-03 01:23:29

标签: c# mysql entity-framework

我有两个表,项目 BOM 。他们的关系是多对多

当我检查迁移类时,我可以看到以下自动生成的代码。

CreateTable(
    "dbo.ProjectBOMs",
    c => new
        {
            Project_Id = c.Int(nullable: false),
            BOM_Id = c.Int(nullable: false),
        })
    .PrimaryKey(t => new { t.Project_Id, t.BOM_Id })
    .ForeignKey("dbo.Projects", t => t.Project_Id, cascadeDelete: true)
    .ForeignKey("dbo.BOMs", t => t.BOM_Id, cascadeDelete: true)
    .Index(t => t.Project_Id)
    .Index(t => t.BOM_Id);

但是,当我尝试使用以下方法访问此表时,它没有显示。

using(var db = new ApplicationDbContext())
{
    db.ProjectBOMs //<== there's no ProjectBOMs in db
}

由于 ProjectBOMs 表已经自动生成,我是否必须再次编写以下代码才能访问该表?

modelBuilder.Entity<Project>()
    .HasMany<BOM>(x => x.BOMs)
    .WithMany(x => x.Projects)
    .Map(x =>
    {
        x.MapLeftKey("Project_Id");
        x.MapRightKey("BOM_Id");
        x.ToTable("ProjectBOMs");
    });

2 个答案:

答案 0 :(得分:0)

我认为问题可能是表格本身并不是模型中的实体,而只是在SQL数据库中表示项目和BOM之间的多对多关系(即使用连接表)的结果)。

您是否需要访问它,因为表中需要其他列?如果是这样this question并且最高投票的答案看起来非常有用。

答案 1 :(得分:0)

如果表ProjectBOMs仅包含项目和物料清单的Forign Key列,则表格未导入。它将导致BOMS上的项目集合和项目上的BOM集合,但不会作为独立实体提供。