0
我有一个连接两个玩家的链接器表。玩家向其他玩家发出挑战,因此我有两个相同的密钥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' 上型 'WhatIsThisWord.WebAPI.Models.WordChallenge' 是无效。在相关类型'WhatIsThisWord.WebAPI.Models.WordChallenge'上未找到外键名'PlayerId'。
我想实现的目标是能够兼得playerIds在表中。
机型号:
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;
}
}