实体框架Code First One-to-One关系

时间:2015-10-27 19:03:02

标签: c# entity-framework key constraints

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

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(“User”),我甚至试图使[Key,ForeignKey(“User”)和没有他们帮助了我。我想只使用数据注释建立1:1的关系。任何帮助都非常感谢。我的两个班级都有自己的PK。

2 个答案:

答案 0 :(得分:15)

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'和'Model.Person'之间关联的主要结尾。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。

Julie Lehrman在her Code First book中讨论了这个问题:

  

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

答案 1 :(得分:0)

这篇文章很老,所以我认为我应该发布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; }
}