首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ef核多2多映射

Ef核多2多映射
EN

Stack Overflow用户
提问于 2021-12-05 12:43:05
回答 1查看 63关注 0票数 0

我有三种多到多的关系像这样:

代码语言:javascript
复制
table 1 skill
table 2 instructions
table 3 person

现在,我需要有一种方法来设置一个技能和人的组合,一个指令列表。我正在考虑有一个表,它具有这个映射SkillId、InstructionId和PersonId。我试过用HasOne.Withmany.HasForeignKey来设置它,但它不起作用。我搞错了

属性或导航“指令”不能添加到实体类型'PersonSkillInstruction‘中,因为实体类型'PersonSkillInstruction’上已经存在相同名称的属性或导航

如果我只设置主键,并让.netcore 5.0为我做这个技巧,我将得到另一个错误

属性“PersonSkillInstruction.Instruction”类型为“InstructionEntity”,当前数据库提供程序不支持该类型。要么更改属性CLR类型,要么使用“NotMapped”属性忽略该属性,或者在“OnModelCreating”中使用“EntityTypeBuilder.Ignore”

我知道我可以做一些事情,比如为个人和技能创造很多人,然后设置一个id,然后将其与指导结合使用,但感觉很可疑。

我怎样才能使这三种方式多到多的工作?

我使用的是.netcore 5.0,ef核心,代码优先和sqlserver

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-05 14:58:00

我认为你所说的是正确的:

,我知道我可以做一些事情,比如为个人和技能创建很多人,然后设置一个id,然后将其与指导结合使用。

不过,这里有一个示例,如果您想创建PersonSkillInstruction表的话。

代码语言:javascript
复制
public class PersonSkillInstruction
{ 
  [ForeignKey("person")]    
  public int PersonId { get; set; }        
  [ForeignKey("skill")]    
  public int SkillId { get; set; }    
  [ForeignKey("instructions")]    
  public int InstructionId { get; set; }    
  public virtual Person Person { get; set; }
  public virtual Skill Skill { get; set; }
  public virtual Instruction Instruction { get; set; }
}

然后,您需要在DBContext中设置PK,如下所示:

代码语言:javascript
复制
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ...
  modelBuilder.Entity<PersonSkillInstruction>()
    .HasKey(t => new { t.PersonId, t.SkillId, t.InstructionId });
// ...

添加新迁移后,您必须引用两个类似的操作,以避免循环:

代码语言:javascript
复制
// ...
  onDelete: ReferentialAction.Restrict
// ...

如果这个表的查询量很大,我建议使用一个具有以下唯一索引的代理键:

代码语言:javascript
复制
modelBuilder.Entity<PersonSkillInstruction>()
  .HasIndex(t => new { t.PersonId, t.SkillId, t.InstructionId })
  .IsUnique(); 

Link about surrogate key

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70234407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档