实体框架代码优先一对一关系

本文关键字:一对一 关系 框架 代码 实体 | 更新日期: 2023-09-27 18:19:34

我有两个实体,我想以1:1的关系连接。用户是主体,用户激活是依赖的,但我不知道它是如何工作的。

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }
    public virtual UserActivation UserActivation { get; set; }
}
public class UserActivation
{
    [Key]
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public bool Active { get; set; }
    public virtual User User { get; set; }
}

我尝试过删除"virtual"关键字,尝试过添加ForeignKey("UserId")或ForeignKey

1:1尝试不支持外键:

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }
    public virtual UserActivation UserActivation { get; set; }
}
public class UserActivation
{
    [Key]
    [ForeignKey("User")]
    public Guid Id { get; set; }
    public bool Active { get; set; }
    public virtual User User { get; set; }
}

无法确定类型"Model.PersonPhoto"answers"Model.Person"之间的关联的主体端。必须使用关系fluent API或数据批注显式配置此关联的主体一端。

Julie Lehrman在她的《代码第一》一书中讨论了这一点:

"使用ForeignKey注释最容易解决此问题在依赖类上,以标识它包含外键。配置一对一关系时,实体框架需要依赖项的主键也是外键。在我们的case PersonPhoto是依赖项及其密钥PersonPhoto.PersonId,也应该是外键。继续并添加ForeignKeyPersonPhoto.PersonId属性的注释,如示例所示4-21.记住指定关系的导航属性添加ForeignKey注释时。"

实体框架代码优先一对一关系

这篇文章很旧,所以我想我应该发布EF 6解决方案

试试这个。。。

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
    public string Username { get; set; }
    public virtual UserActivation UserActivation { get; set; }
}
public class UserActivation
{
    [ForeignKey("User")]
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public bool Active { get; set; }
    public virtual User User { get; set; }
}