代码优先链接表语法

本文关键字:语法 链接表 代码 | 更新日期: 2023-09-27 18:02:20

在我的代码中有2个模型模型1有一个名为Id的属性模型2有一个名为ModuleId

的属性

数据库包含2个表,其中包含相应的字段

我也有一个链接表(Modules_And_Questions)在数据库中定义为;

    Id [int]
    ModuleId [int]
    QuestionId [int]

在我的上下文构造函数中,我有以下代码将两个模型链接在一起;

 modelBuilder.Entity<Module>().HasMany(m => m.Questions).WithMany()
          .Map(
            q =>
            {
                q.ToTable("Modules_And_Questions");
                q.MapLeftKey("ModuleId");
                q.MapRightKey("Id");
            });
      base.OnModelCreating(modelBuilder);

当我运行代码从表中提取数据时,然后尝试使用它抱怨的对象。查看foo的sql,它包含

INNER JOIN [dbo].[Questions] AS [Extent3] ON [Extent3].[Id] = [Extent2].[Id] ) AS [Join1] ON [Extent1].[ModuleId] = [Join1].[ModuleId]

手动编辑这一行,使[Extent1]。[ModuleId]表示[Extent1]。[Id]表示sql验证。那么我需要改变我的代码或映射来解决这个问题,使生成的sql是正确的。

代码优先链接表语法

如何为链接表制作复合键?

 public class  Modules_And_Questions
 {
   [Key, Column(Order = 1)]
   public int ModuleId {get;set;}
   public Module Module {get;set;}
   [Key, Column(Order = 2)]
   public int QuestionId {get;set;}
   public Question ForeignKeyQuestion{get;set;}
 }

  modelBuilder.Entity<Modules_And_Questions>().HasRequired(m => m.Question).WithForeignKey(n=>n.QuestionId)
  modelBuilder.Entity<Modules_And_Questions>().HasRequired(m => m.Module).WithForeignKey(n=>n.ModuleId)