このトピックについてはいくつかの質問がありますが、私の質問は真の自己参照に非常に固有のものです. 他の質問の例はすべて循環参照であり、この場合は役に立ちません。
私がこのモデルを持っているとしましょう:
public class User
{
[Key]
public int Id { get; set; }
...
public int CreatedByUserId { get; set; }
}
そしてこの地図:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
this.HasRequired(a => a.CreatedByUser)
.WithMany()
.HasForeignKey(u => u.CreatedByUserId);
}
}
移行によってこのコードを使用してデータベースが生成された後、SQL Management Studio で Id = 1、CreatedByUserId = 1 のユーザーを手動で追加できるため、このような自己参照が機能することがわかります。
ただし、EF を使用してユーザーを作成すると、「依存操作の有効な順序を判断できません」という問題が発生します。最初のエンティティに外部キーを持つ別の新しいエンティティを参照する新しいエンティティ (循環参照) に関する問題については、多くの質問があります。このような場合の解決策は、最初にエンティティの 1 つを保存するか、循環エンティティ外部キーに null 許容 ID を設定することです。最初は不可能であり、2番目はnull許容IDを持つことができないという外部制約であるため、どちらも実行できません。
したがって、エントリを手動で追加することでこれを達成する方法を見ると、EF5 の制限であると推測できます。回避策は何ですか?