首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多对多:无法确定由导航属性表示的关系。

问多对多:无法确定由导航属性表示的关系。
EN

Stack Overflow用户
提问于 2020-10-22 21:57:55
回答 1查看 310关注 0票数 1

我试图使用代码优先工作流添加迁移,但是EF核心似乎不承认我的"TeamMember“和"Step”类之间的多到多关系。

我的“踏步”课:

代码语言:javascript
复制
public class Step {
    public int Id { get; set; }
    public int ProjectId { get; set; }
    public Project Project { get; set; }

    [Required]
    [StringLength(30, MinimumLength = 3, ErrorMessage = "The step name must have between 3 and 30 characters!")]
    public string Name { get; set; }

    [Required]
    [StringLength(500, MinimumLength = 10, ErrorMessage = "The step description must have between 10 and 500 characters!")]
    public string Description { get; set; }

    public ICollection<TeamMember> TeamMembers{ get; set; }        

    public Step() {
    }
}

我的TeamMember课:

代码语言:javascript
复制
public class TeamMember {
    public int Id { get; set; }
    public int UserId{ get; set; }
    public User User{ get; set; }
    public string Role { get; set; }
    public int TeamId { get; set; }
    public Team Team{ get; set; }

    public ICollection<Step> Steps{ get; set; }

    public TeamMember() {            
    }
}   

我的文脉课:

代码语言:javascript
复制
public class ProjectContext : IdentityDbContext<User> {
    public ProjectContext(DbContextOptions<ProjectContext> options)
       : base(options) {
    }

    public DbSet<User> User { get; set; }
    public DbSet<Project> Projects { get; set; }
    public DbSet<Team> Teams { get; set; }
    public DbSet<Step> Steps { get; set; }        
    public DbSet<TeamMember> TeamMembers{ get; set; }
    protected override void OnModelCreating(ModelBuilder builder) {
        builder.Entity<User>().HasKey(m => m.Id);
        builder.Entity<Project>().HasKey(m => m.Id);
        builder.Entity<Team>().HasKey(m => m.Id);
        builder.Entity<Step>().HasKey(m => m.Id);
        builder.Entity<TeamMember>().HasKey(m => m.Id);
        base.OnModelCreating(builder);
    }
}

错误字符串:无法确定导航属性'Step.TeamMembers‘所表示的关系。或者手动配置关系,或者使用“NotMapped”属性忽略此属性,或者在“OnModelCreating”中使用“EntityTypeBuilder.Ignore”。

正如您所看到的,我在每个类中都有一个ICollection,我无法判断错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 22:07:49

默认情况下,EF不支持多到多的关系。

为了实现这种关系,您必须创建一个连接表:

您可以这样轻松地配置它:

步骤:

代码语言:javascript
复制
public class Step {
    public ICollection<TeamMemberStep> TeamMemberStep { get; set; }        
}

小组成员:

代码语言:javascript
复制
public class TeamMember {
    public ICollection<TeamMemberStep> TeamMemberStep { get; set; }
}

连接表:

代码语言:javascript
复制
public class TeamMemberStep
{
    public string TeamMemberId { get; set; }
    public virtual TeamMember TeamMember { get; set; }
    public int StepId { get; set; }
    public virtual Step Step { get; set; }
}

DbContext:

代码语言:javascript
复制
modelBuilder.Entity<TeamMemberStep>()
    .HasKey(aup => new { aup.TeamMemberId, aup.StepId });

public DbSet<TeamMemberStep> TeamMemberSteps { get; set; }

现在,您将查询TeamMemberStep表以从任何一方获取数据。

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

https://stackoverflow.com/questions/64491086

复制
相关文章

相似问题

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