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

您创建的模型会尝试复制关系。

希望这会起作用

相关问题