2引用对象中的同一对象 - 多重性在关系中的角色中无效

时间:2016-05-11 11:06:11

标签: c# entity-framework ef-code-first entity-framework-6 data-annotations

我有一个User.cs:

[Table("Users")]
public class User : BaseUser, IBaseUser
{
    [Key]
    public override int Id { get; set; }

    [ForeignKey("CreatedBy")]
    public int CreatedById { get; set; } = 0;

    public DateTime? CreatedOn { get; set; }

    [ForeignKey("ModifiedBy")]
    public int ModifiedById { get; set; } = 0;

    public DateTime? ModifiedOn { get; set; }


    public virtual User CreatedBy { get; set; } = null;

    public virtual User ModifiedBy { get; set; } = null;
    public bool IsDeleted { get; set; } = false;
}

我希望将CreatedBy和ModifiedBy导航属性添加到创建和修改此User对象的User对象。

但是,当我启动我的应用程序时,我在我的' LogDb'上收到此错误。 (派生自DbContext)Database.Initialize(true)函数调用:

  

User_ModifiedBy_Target :: Multiplicity在Role中无效   ' User_ModifiedBy_Target' in relationship' User_ModifiedBy'。因为   Dependent Role属性不是关键属性,鞋面   依赖角色的多样性的界限必须是' *'。

我尝试过很多东西,但似乎无法获得我想要的结果。

有人能指出我正确的方向吗? (如果可能,使用数据注释)

1 个答案:

答案 0 :(得分:0)

不幸的是,你需要离开数据注释才能做到这一点:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasRequired(u => u.CreatedBy).WithMany();
    modelBuilder.Entity<User>().HasRequired(u => u.ModifiedBy).WithMany();
}

您可能还希望将CreatedByIdModifiedById定义为int?,以便它们可以为空,或者您永远无法创建第一个用户!