我有一节课:
[Table(nameof(User), Schema = "Administration")]
public class User : IBaseModel
{
[Key]
public int UserId { get; set; }
#region IBaseModel
public int AddedBy { get; set; }
[ForeignKey("AddedBy")]
public virtual User UserAddedBy { get; set; }
public int ModifiedBy { get; set; }
[ForeignKey("ModifiedBy")]
public virtual User UserModifiedBy { get; set; }
#endregion
}
我尝试为这个表创建自我关系(谁AddedBy和谁是ModifiedBy项目)
当我的课程如上所示,我尝试在Package Manager Console上使用Add-Migration init
时会返回错误:
无法确定之间关联的主要结束 类型' abc.Administration.User'和' abc.Administration.User'。 必须明确配置此关联的主要结尾 使用关系流畅的API或数据注释。
发生此错误后,我尝试使用流畅的API和方法OnModelCreating
(在我的上下文中)我写道:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Administration.User>().HasOptional(e => e.UserAddedBy).WithMany().HasForeignKey(m => m.AddedBy);
modelBuilder.Entity<Administration.User>().HasOptional(e => e.UserModifiedBy).WithMany().HasForeignKey(m => m.ModifiedBy);
}
再次尝试Add-Migration init
,但我再次看到错误消息:
在模型生成期间检测到一个或多个验证错误:
abc.User_UserAddedBy ::多重性与参照冲突 角色&#39; User_UserAddedBy_Target&#39;中的约束谈恋爱 &#39; User_UserAddedBy&#39 ;.因为Dependent中的所有属性 角色不可为空,主要角色的多样性必须为“1”。 abc.User_UserModifiedBy ::多重性与参照冲突 角色&#39; User_UserModifiedBy_Target&#39;中的约束谈恋爱 &#39; User_UserModifiedBy&#39 ;.因为Dependent中的所有属性 角色是不可空的,主要角色的多样性必须是&#39;。
我找到了在虚拟身份之前添加Required
属性的信息,但它没有帮助。
答案 0 :(得分:2)
因为从属角色中的所有属性都是不可为空的, 主要角色的多样性必须是&#39; 1&#39;。
尝试使用int?
代替int
。
答案 1 :(得分:1)
根据提供的说明,您可以执行以下操作:
这样,用户中唯一的“被骗”将是系统,在我看来,这是一个很好的权衡。