Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码优先链接表语法_C#_Entity Framework - Fatal编程技术网

C# 代码优先链接表语法

C# 代码优先链接表语法,c#,entity-framework,C#,Entity Framework,我的代码中有两个模型 模型1有一个名为Id的属性 模型2有一个名为ModuleId的属性 数据库包含2个表,其中包含相应的字段 我在数据库中还有一个链接表(模块和问题),定义为 Id [int] ModuleId [int] QuestionId [int] 在我的上下文构造函数中,我有以下代码将两个模型链接在一起 modelBuilder.Entity<Module>().HasMany(m => m.Questions).WithMany()

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

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

我在数据库中还有一个链接表(模块和问题),定义为

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

手动编辑此行,使[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)
公共类模块和问题
{
[键,列(顺序=1)]
public int ModuleId{get;set;}
公共模块模块{get;set;}
[键,列(顺序=2)]
public int QuestionId{get;set;}
公共问题ForeignKeyQuestion{get;set;}
}
modelBuilder.Entity().HasRequired(m=>m.Question).WithForeignKey(n=>n.QuestionId)
modelBuilder.Entity().HasRequired(m=>m.Module)。WithForeignKey(n=>n.ModuleId)

我可以试试。但我认为(我知道这很危险),我不需要为映射表创建对象?您不需要加载链接类型的对象。Compisite键只提供用于限制两个实体之间的唯一关系。不喜欢语句的.WithForeignKey()部分。不确定这是否是EF版本的问题,但google for“.WithForeignKey不会出现太多问题
 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)