Code First关于属性的ForeignKeyAttribute''在类型''无效。 EF 6.1.3

时间:2016-02-20 12:52:42

标签: c# entity-framework

我尝试使用Entity Framework 6.1.3 Code First为运动应用程序创建数据库。当我尝试使数据库抛出异常。

  

属性' HomeTeamId'上的ForeignKeyAttribute在类型'匹配'无效。导航属性' TeamId'没有找到依赖类型'匹配'。 Name值应该是有效的导航属性名称。

我的团队课

public class Team
{
    private ICollection<Match> matches;

    public Team()
    {
        this.matches = new HashSet<Match>();
    }

    public int Id { get; set; }

    [Required]
    [MinLength(5)]
    [MaxLength(40)]
    public string Name { get; set; }

    public virtual ICollection<Match> Matches
    {
        get { return this.matches; }
        set { this.matches = value; }
    }
}

我的匹配课程

public class Match
{
    public int Id { get; set; }

    [Column(Order = 1)]
    [ForeignKey("TeamId")]
    public int HomeTeamId { get; set; }

    public virtual Team HomeTeam { get; set; }

    [Required]
    [Range(0, 255)]
    public byte HomeTeamScore { get; set; }

    [Column(Order = 1)]
    [ForeignKey("TeamId")]
    public int AwayTeamId { get; set; }

    public virtual Team AwayTeam { get; set; }

    [Required]
    [Range(0, 255)]
    public byte AwayTeamScore { get; set; }
}

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

你有两个外键......

AwayTeamId
HomeTeamId

他们都引用

TeamId

EntityFramework应该能够根据您拥有的内容找出它自己的关系,因此请尝试删除ForeignKey属性并尝试更新。

阅读ForeignKeyAttribute

上的摘要评论
/// <summary>
/// Denotes a property used as a foreign key in a relationship.
/// The annotation may be placed on the foreign key property and specify the associated navigation property name, 
/// or placed on a navigation property and specify the associated foreign key name.
/// </summary>

所以...你的外键属性应该像这样设置......

[ForeignKey("AwayTeam")]
[ForeignKey("HomeTeam")]

修改

我在本地复制了您的解决方案,删除了外键属性和所有其他相关属性,包括ID本身解决了问题。

public virtual Arena Arena { get; set; }

public virtual Team HomeTeam { get; set; }

[Required]
[Range(0, 255)]
public byte HomeTeamScore { get; set; }

public virtual Team AwayTeam { get; set; }

[Required]
[Range(0, 255)]
public byte AwayTeamScore { get; set; }

如您所见,没有AwayTeamId,没有HomeTeamId

这就是实体框架在后端生成的内容......你仍然拥有一对多的关系,测试它,如果你有问题请告诉我

EF