我的代码中有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是正确的。
答案 0 :(得分:0)
如何为链接表制作复合键?
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)