c# - 如何创建指向同一唯一字符串列的 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; }
}
解决方案
您需要在 guid 上指定备用键。然后为其配置外键。通过使用流利的 API 来做到这一点。此处的使用示例:https ://docs.microsoft.com/en-US/ef/core/modeling/alternate-keys 。
推荐阅读
- javascript - 集成 Parse-SDK-JS 以响应反式应用程序
- c# - 将 protobuf-net RuntimeTypeModel 与 GrpcClient (AddCodeFirstGrpcClient) 一起使用
- sql - 如何在 b 中没有函数(a)的情况下连接表
- reactjs - 传递给子组件的道具在构造函数和 componentDidMount() 中为空
- excel - Excel VBA 错误 1004 - 此操作不适用于多项选择(需要复制和粘贴空列)
- android - 升级到目标 29 后,在 android 10 /apex/com.android.runtime/lib64/libart.so (art::OatFileManager::DumpForSigQuit
- c++ - std::unordered_set 如何分配桶以提供 O(1) 查找?
- python - 使用 asyncio 异步处理函数请求
- c++ - 在其块中包含文件时扩展类定义
- r - Bookdown 并将 kable 表渲染到 word 文档