ASP实体框架Fluent API [ForeignKey]注释错误

时间:2012-09-16 07:10:39

标签: asp.net entity-framework

我正在尝试建立一对一的关系,并在声明属性为FK时遇到了一些问题。我已经搜索并阅读了这里发布的一些问题,但没有解决我的问题。

public class User
{
    [Key]
    public int userId {get;set;}
    [DisplayName("User Name")]
    [Required(ErrorMessage="User name required.")]
    public string username {get;set;}
    [DisplayName("Password")]
    [Required(ErrorMessage="Password required.")]
    [MinLength(6)]
    public string password {get;set;}
    [DisplayName("Email")]
    [Required(ErrorMessage="Email required.")]
    public string email {get;set;}

    public virtual List<RoleDetail> roleDetails { get; set; }
    public virtual Customer customer { get; set; }
}

public class Customer
{
    [Key]
    public int cusomterId { get; set; }
    [DisplayName("First Name")]
    [Required(ErrorMessage="First name required.")]
    public string firstname {get;set;}
    [DisplayName("Last Name")]
    [Required(ErrorMessage="Last name required.")]
    public string lastname {get;set;}
    [ForeignKey("userId")]
    public int userId {get;set;}
}

当我使用[ForeignKey]注释时,我收到此错误。我正在使用 System.ComponentModel.DataAnnotations 。此外,[Key]工作正常。

The type or namespace name 'ForeignKeyAttribute' could not be 
found (are you missing a using directive or an assembly reference?) 

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

经过多次谷歌搜索后,问题解决了。事实证明[ForeignKey]注释位于 System.ComponentModel.DataAnnotations.Schema

ForeignKey not being recognised in VS2012 RC

答案 1 :(得分:1)

修改

我的答案对于EF&lt; 5.0但是EF&gt; = 5.0是错误的。在这种情况下,@ MooCow的回答是正确的。


[KeyAttribute][ForeignKeyAttribute]类都位于命名空间System.ComponentModel.DataAnnotations中,但它们位于两个不同的程序集中。

[KeyAttribute]位于System.ComponentModel.DataAnnotations.dll程序集中,它直接属于.NET框架。

但是,[ForeignKeyAttribute]位于EntityFramework.dll程序集中,它是EntityFramework NuGet包的一部分。

在我看来,这只能表示您的课程所在的项目/程序集没有EntityFramework.dll的引用。如果添加此引用,它应该可以工作。

作为旁注:您尝试定义一对一关系的方式不起作用。您不能使用单独的外键列/属性。您必须将主键本身用作外键(shared primary key association),如下所示:

public class Customer
{
    [Key]
    [ForeignKey("user")]
    public int customerId { get; set; }
    //...
    public User user {get;set;}
}