首页 > 解决方案 > 如何创建指向同一唯一字符串列的 2 个字符串外键?

问题描述

我有一个实体“Player”,它具有字符串类型的“Guid”属性,具有唯一约束。

我有一个“PlayerData”实体,它具有字符串类型的“PlayerGuid”、“OpponentPlayerGuid”属性。

如何使用 EF Core 确保 PlayerGuid 和 OpponentPlayerGuid 属性接受仅在 Player.Guid 属性中找到的值?

我已经尝试了各种方法,可能有 5 种以上关于 stackoverflow 的不同答案,但都没有帮助我解决这个问题。

PlayerData 实体

public class PlayerData
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public int AttackLevel { get; set; } = 0;
        public int DefenseLevel { get; set; } = 0;
        [InverseProperty("Guid")]
        public string PlayerGuid { get; set; }
        public Player Player { get; set; }
        //[ForeignKey("OpponentPlayerGuid")]
        //public string OpponentPlayerGuid { get; set; }
        public int WinStreak { get; set; } = 0;
        public double Armor { get; set; }
        public double Health { get; set; }
        public bool Acted { get; set; }
        public ActionType LastAction { get; set; }


    }

玩家实体

    public class Player
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        [ForeignKey("SessionId")]
        public int? SessionId { get; set; }
        public Session Session { get; set; }
        [Required,MaxLength(36)]
        public string Guid { get; set; }
        public DateTime? BanTime { get; set; }

        public List<PlayerData> PlayerDatas { get; set; }


    }

标签: c#entity-framework-core

解决方案


您需要在 guid 上指定备用键。然后为其配置外键。通过使用流利的 API 来做到这一点。此处的使用示例:https ://docs.microsoft.com/en-US/ef/core/modeling/alternate-keys 。


推荐阅读