我有一个链接表,将两个玩家链接在一起。玩家向另一个玩家发出挑战,因此我有两个相同的密钥PlayerId
。然而,这似乎正在产生问题。
我测试了以下场景:
虚拟属性:
public class WordChallenge
{
[...]
[Required]
public virtual Player IssuingPlayer { get; set; }
[Required]
public virtual Player ChallengedPlayer { get; set; }
}
在运行时期间产生以下异常:
无法在对象' dbo.Players'中插入重复的键行。具有唯一索引' IX_Username'。
ForeignKey属性:
public class WordChallenge
{
[...]
[Required]
[ForeignKey("PlayerId")]
public virtual Player IssuingPlayer { get; set; }
[Required]
[ForeignKey("PlayerId")]
public virtual Player ChallengedPlayer { get; set; }
}
在Add-Migration
命令
属性上的ForeignKeyAttribute' ChallengedPlayer' on type' WhatIsThisWord.WebAPI.Models.WordChallenge'无效。外键名称' PlayerId'没有找到依赖类型' WhatIsThisWord.WebAPI.Models.WordChallenge'。
我想要实现的目标是能够将两个playerId放在桌面上。
玩家模型:
DataContract控制JSON序列化
[DataContract]
public class Player
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key, Column(Order=0)]
[DataMember]
public Guid PlayerId { get; set; }
public virtual ICollection<Player> Friends { get; set; }
[Required]
public virtual string Password { get; set; }
[MaxLength(100)]
[Index(IsUnique = true)]
[DataMember]
public string Username { get; set; }
[Required]
public string Email { get; set; }
public virtual ICollection<WordChallenge> IssuedChallenges { get; set; }
public virtual ICollection<WordChallenge> ReceivedChallenges { get; set; }
}
插入代码:
public async Task<Models.WordChallenge> CreateChallenge(Player challenger, Player challengeReceiver, WordChallenge challenge)
{
using (var model = _modelFactory.New())
{
challenge.IssuingPlayer = challenger;
challenge.ChallengedPlayer = challengeReceiver;
model.WordChallenges.Add(challenge);
await model.SaveChangesAsync();
return challenge;
}
}
答案 0 :(得分:2)
你能尝试建立这样的模型
public class WordChallenge
{
[Required]
public Guid IssuingPlayerID { get; set; }
[Required]
public Guid ChallengedPlayerID { get; set; }
[ForeignKey("IssuingPlayerId")]
public virtual Player IssuingPlayer { get; set; }
[ForeignKey("ChallengedPlayerID")]
public virtual Player ChallengedPlayer { get; set; }
}
您创建的模型会尝试复制关系。
希望这会起作用