使用Entity Framework实现一对一关系中的主键错误

i_l*_*ack 5 c# entity-framework primary-key

我创建了一个数据库,根据该数据库,用户配置文件由以下两个类组成:

public class Usr
{
    [Key()]
    public int UsrID { get; set; }

    public virtual UsrType UsrType { get; set; }

    public virtual UsrStatus UsrStatus { get; set; }

    [Required]
    [MaxLength(100, ErrorMessage = "Email can only contain {0} characters")]
    public string UsrEmail { get; set; }

    [Required]
    [MaxLength(32, ErrorMessage = "Password can only contain {0} characters")]
    [MinLength(8, ErrorMessage = "Password must be at least {0} characters")]
    public string UsrPassword { get; set; }
}

public class UsrDetails
{
    [ForeignKey("UsrID")]
    [Required]
    public virtual Usr Usr { get; set; }

    [Required]
    [MaxLength(40, ErrorMessage = "Name can only contain {0} characters")]
    public string UsrName { get; set; }

    [Required]
    [MaxLength(40, ErrorMessage = "Surname can only contain {0} characters")]
    public string UsrSurname { get; set; }

    [Required]
    [MaxLength(20, ErrorMessage = "Country can only contain {0} characters")]
    public string UsrCountry { get; set; }

    [Required]
    [MaxLength(20, ErrorMessage = "City can only contain {0} characters")]
    public string UsrCity { get; set; }

    [Required]
    [MaxLength(40, ErrorMessage = "Street can only contain {0} characters")]
    public string UsrStreet { get; set; }

    [Required]
    public int UsrNum { get; set; }

    [Required]
    public int UsrPostalCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想通过同时作为主键来连接它们,UsrID并且我得到一个UsrDetails没有主键的错误,因为我正在使用外键属性.有任何想法吗?

oct*_*ccl 4

您需要声明一个UserDetails与属性中声明的名称相同的关键属性ForeignKey:

public class UsrDetails
{
    [Key]
    public int UsrID{ get; set; }

    [ForeignKey("UsrID")]
    public virtual Usr Usr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您的所有实体都必须具有 PK 属性。在这种情况下,如果您表示一对一关系,则依赖实体的 PK 也是 FK。如果您需要更多信息,可以查看本教程。