我有两个实体,我希望以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。
答案 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; }
}