无法通过将self指定为父级来确定相关操作的有效排序

时间:2017-08-18 18:49:36

标签: c# .net entity-framework ef-code-first

当我尝试将自己指定为插入的父级时,我收到以下错误。

  

无法确定相关操作的有效排序。由于外键约束,模型要求或存储生成的值,可能存在依赖关系。

代码如下。我以为我能做到这一点,但我猜不是。我怎样才能在插页上做到这一点?

public class Team {

    public int? TeamParentId { get; set; }

    [ForeignKey("TeamParentId")]
    public virtual Team TeamParent { get; set; }

    public virtual ICollection<Team> Teams { get; set; }
}

发生错误的地方

    divisionTeam.Team.TeamParent = divisionTeam.Team;

 if (divisionTeam.Id == 0)
            {
                _divisionTeamsRepository.Add(divisionTeam);
            }

            UnitOfWork.Commit();

DataContext.cs

modelBuilder.Entity<Team>()
    .HasOptional(p => p.TeamParent)
    .WithMany(p => p.Teams)
    .HasForeignKey(q => q.TeamParentId);

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

看起来你正在设置你正在创建一个循环的团队的方式,这是不可能的&#34;到&#34;保存&#34;由EF。

如果您询问如何实际完成此操作,那么您必须实际保存没有父级的Team,并且SaveChanges()方法将其Id分配给{ {1}},像这样:

TeamParentId

我知道这看起来很复杂,但这是我能想到的唯一方法。希望这可以帮助你

答案 1 :(得分:0)

1)转到* .tt POCO生成器文件

2)查找文本“ ForeignKeyFilter”

3)设置

ForeignKeyFilter = (ForeignKey fk) =>
{
    if (fk.FkTableName == fk.PkTableName)
       return null;
    return fk;
};

所引用的记录和集合不会生成为结果类型(因此不能在代码中使用)。外键项仍然在那里。 INSERT就可以了。