c# - 2个指向同一张表的外键
问题描述
我正在尝试创建一个 API 来管理足球比赛。我正在使用具有代码优先方法和域驱动设计 (DDD) 的 Entity Framework Core。我被 和 之间的关系所Player
困扰Match
。
基本上,每场比赛都有 2 名球员(Host
和Guest
),所以我试图将 2 个 FK(HomePlayerId
,GuestPlayerId
)指向同一张桌子,但我得到了一个例外:
无法确定“Player”类型的导航“Match.HomePlayer”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
Player
班级:
public class Player : Entity
{
private List<Match> _matches;
public string Name { get; private set; }
public Team Team { get; private set; }
public Group Group { get; private set; }
public IReadOnlyCollection<Match> Matches { get => _matches.ToArray(); }
public Player(string name, Team team)
{
Name = name;
Team = team;
_matches = new List<Match>();
}
protected Player() { }
}
Match
班级:
public class Match : Entity
{
public Guid HomePlayerId { get; private set; }
public Player HomePlayer { get; private set; }
public Guid GuestPlayerId { get; private set; }
public Player GuestPlayer { get; private set; }
public int GoalsHomeTeam { get; private set; }
public int GoalsGuestTeam { get; private set; }
public DateTime MatchDate { get; private set; }
public Match(Player homePlayer, Player guestPlayer, int goalsHomeTeam, int goalsGuestTeam)
{
HomePlayer = homePlayer;
GuestPlayer = guestPlayer;
GoalsHomeTeam = goalsHomeTeam;
GoalsGuestTeam = goalsGuestTeam;
MatchDate = DateTime.Now;
}
protected Match() { }
}
基础实体:
public abstract class Entity : IEntity
{
protected Entity()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
DbContext
:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> opt) : base(opt)
{
}
public DbSet<Group> Groups { get; set; }
public DbSet<Player> Players{ get; set; }
public DbSet<Match> Matches{ get; set; }
public DbSet<Team> Teams{ get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
}
}
我怎样才能建立我的模型来建立这种关系?
解决方案
推荐阅读
- css - 将 SVG 图标定位为 list-style-image
- php - 拉拉维尔 | 当我运行 php artisan migrate 命令时出现 MySQL 错误
- python - 在 VS Code 中将 Python linter 与 Docker 一起使用
- mysql - 当表之间存在多对多关系时,获取多表2记录共有的表1记录
- php - 如何使用 Laravel 队列自动删除数据库记录?
- html - fullpage.js 滑块的问题
- haskell - 在映射特定字段时解码记录
- python - 带有边界框的平面的 Python VTK 剪辑/剪切集合
- matlab - 在MATLAB中,单引号和双引号有什么区别?
- reactjs - 在浏览器中按下反应路由器会更改道具