我有一节课:
[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
}
我尝试为此表创建自我关系(谁添加了和谁修改了项目)
当我的班级看起来像上面那样并且我尝试Add-Migration init
在包管理器控制台上使用时,它返回错误:
无法确定类型“abc.Administration.User”和“abc.Administration.User”之间关联的主体端。必须使用关系流畅 API 或数据注释显式配置此关联的主体端。
在这个错误之后,我尝试使用 fluent 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:: 多重性与关系“User_UserAddedBy”中的角色“User_UserAddedBy_Target”中的引用约束冲突。因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为“1”。abc.User_UserModifiedBy:: 多重性与关系“User_UserModifiedBy”中的角色“User_UserModifiedBy_Target”中的参照约束冲突。因为从属角色中的所有属性都是不可为空的,所以主体角色的多重性必须为“1”。
我Required
在虚拟属性之前找到了要添加到属性的信息,但没有帮助。
根据提供的说明,您可以执行以下操作:
这样,用户中唯一“被欺骗”的将是 System,在我看来,这是一个不错的权衡。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句