2016-05-13 130 views
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; 
     } 
    } 

回答

1

你可以嘗試建立一個模型,這樣

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

您創建的模型會嘗試複製關係。

希望這會起作用

相關問題