0

我正在尝试建立一对一的关系,并在将属性声明为 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?) 

我在这里想念什么?

4

2 回答 2

5

更多谷歌搜索后问题解决。原来 [ForeignKey] 注释在System.ComponentModel.DataAnnotations.Schema

VS2012 RC 中无法识别 ForeignKey

于 2012-09-17T20:42:55.987 回答
1

编辑

我下面的答案对于 EF < 5.0 是正确的,但对于 EF >= 5.0 是错误的。在这种情况下,@MooCow 的答案是正确的。


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

[KeyAttribute]是在System.ComponentModel.DataAnnotations.dll直接属于.NET框架的程序集中。

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

在我看来,这只能意味着您的类所在的项目/程序集没有对EntityFramework.dll. 如果您添加此参考,它应该可以工作。

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

public class Customer
{
    [Key]
    [ForeignKey("user")]
    public int customerId { get; set; }
    //...
    public User user {get;set;}
}
于 2012-09-16T12:12:14.010 回答