在代码优先方法中使用Entity Framework的ForeignKeyAttribute名称无效

时间:2016-07-10 20:50:18

标签: c# asp.net entity-framework asp.net-mvc-5 ef-migrations

我有以下型号

public class Team
{
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    [ForeignKey("User")]
    public int ManagerId { get; set; }

    public virtual User User { get; set; }
}

这是我的User课程:

public class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    [ForeignKey("Comapny")]
    public int CompanyId { get; set; }

    public virtual Company Company { get; set; }
}

这是我的Company课程:

public class Company
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }
}

当我尝试添加新迁移时,我收到以下错误

  

属性' CompanyId'上的ForeignKeyAttribute在类型上   ' ReportsEngine.Areas.Test.Models.User'无效。导航   财产' Comapny'在依赖类型上找不到   ' ReportsEngine.Areas.Test.Models.User&#39 ;. Name值应为a   有效的导航属性名称。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

它只是一个错字,公司而不是Comapany

[ForeignKey("Company")]
    public int CompanyId { get; set; }

答案 1 :(得分:1)

[ForeignKey("Comapny")]表示用于Company表的外键的属性应为Comapny

错误是因为您尚未在Comapny表上定义Company属性。

将以下内容添加到Company表中:

public int Comapny { get; set; }

显然,最好在Id前加上它,以表明它是那种类型的字段。

或者您可以省略[ForeignKey]属性,让实体框架代码首先为您添加一个。