C# 首先对属性'';关于类型'';无效。环境足迹6.1.3

C# 首先对属性'';关于类型'';无效。环境足迹6.1.3,c#,entity-framework,C#,Entity Framework,我首先尝试使用EntityFramework6.1.3代码为体育应用程序创建数据库。当我试图使数据库是抛出我异常 类型“Match”的属性“HomeTeamId”上的ForeignKeyAttribute无效。在依赖类型“Match”上未找到导航属性“TeamId”。名称值应为有效的导航属性名称 我的团队课 public class Team { private ICollection<Match> matches; public Team() {

我首先尝试使用EntityFramework6.1.3代码为体育应用程序创建数据库。当我试图使数据库是抛出我异常

类型“Match”的属性“HomeTeamId”上的ForeignKeyAttribute无效。在依赖类型“Match”上未找到导航属性“TeamId”。名称值应为有效的导航属性名称

我的团队课

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

有人能帮我解决这个问题吗?

你有两个外键

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>

编辑 我在本地复制了您的解决方案,删除外键属性和所有其他相关属性(包括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

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


您有两个外键

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>

编辑 我在本地复制了您的解决方案,删除外键属性和所有其他相关属性(包括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

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


如果我改变了,那么我还有一个例外。“无法将属性“HomeTeamId”配置为导航属性。该属性必须是有效的实体类型,并且该属性应具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型。”那么有什么例外?属性“HomeTeamId”不能配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型。@evelikov92 Ok。。。试试这个
[ForeignKey(“HomeTeam”)]
[ForeignKey(“AwayTeam”)]
新异常“其他信息:引入外键约束“FK_dbo.Matches_dbo.Teams_AwayTeam”在表上的“Matches”可能导致循环或多个级联路径。在删除时指定无操作,或在更新时指定无操作,或修改其他外键约束。”如果我改变了,那么我还有一个例外。“无法将属性“HomeTeamId”配置为导航属性。该属性必须是有效的实体类型,并且该属性应具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型。”那么有什么例外?属性“HomeTeamId”不能配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的getter和setter。对于集合属性,该类型必须实现ICollection,其中T是有效的实体类型。@evelikov92 Ok。。。试试这个
[ForeignKey(“HomeTeam”)]
[ForeignKey(“AwayTeam”)]
新异常“其他信息:引入外键约束“FK_dbo.Matches_dbo.Teams_AwayTeam”在表上的“Matches”可能导致循环或多个级联路径。在删除时指定无操作,或在更新时指定无操作,或修改其他外键约束。”