实体框架代码优先一对一关系
本文关键字:一对一 关系 框架 代码 实体 | 更新日期: 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; }
}