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;
}
}