我正在尝试建立一对一的关系,并在声明属性为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?)
我在这里缺少什么?
答案 0 :(得分:5)
经过多次谷歌搜索后,问题解决了。事实证明[ForeignKey]注释位于 System.ComponentModel.DataAnnotations.Schema
答案 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;}
}