繁体   English   中英

EF core 中的两个一对一关系

[英]Two one-to-one relationships in EF core

我正在尝试为具有以下类的实体配置两次一对一关系。

public class Team 
{
    ...
    public virtual TeamGraphic TeamLogo { get; set; }
    public virtual TeamGraphic TeamPlayer { get; set; }
}
public class TeamGraphic
{
    ...
    public virtual Team Team { get; set; }
}

TeamGraphics 将是图像数据。

在数据上下文中 class

modelBuilder.Entity<Team>(t =>
{
    t.HasOne<TeamGraphic>(g => g.TeamLogo)
    .WithOne(t => t.Team);

    t.HasOne<TeamGraphic>(g => g.TeamPlayer)
    .WithOne(t => t.Team);
});

所以用文字来说。 一个团队可以有一个徽标,一个团队可以有一个球员(图片)。

但是当我尝试进行迁移时,出现错误:

Cannot create a relationship between 'TeamGraphic.Team' and 'Team.TeamPlayer' because a 
relationship already exists between 'TeamGraphic.Team' and 'Team.TeamLogo'. Navigations can 
only participate in a single relationship. If you want to override an existing relationship 
call 'Ignore' on the navigation 'Team.TeamPlayer' first in 'OnModelCreating'.

这完全有可能吗?

完整解释错误: “导航只能参与单一关系。” 这意味着您应该在TeamGraphic上创建第二个Team

public class TeamGraphic
{
    ...
    public virtual Team TeamFromTeamLogo { get; set; }
    public virtual Team TeamFromTeamPlayer { get; set; }
}

modelBuilder.Entity<Team>(t =>
{
    t.HasOne<TeamGraphic>(g => g.TeamLogo)
    .WithOne(t => t.TeamFromTeamLogo);

    t.HasOne<TeamGraphic>(g => g.TeamPlayer)
    .WithOne(t => t.TeamFromTeamPlayer);
});

它有道理。 如果您只有一个反向导航, TeamGraphic.Team是不明确的。 “哪一个”?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM