私は何時間もこれに取り組んでいて、検索で見つけた多くの提案を試しましたが、うまくいきませんでした。コードファーストのEF 5を使用しています。
状況は、私が従業員クラスを持っているということです。次に、2 つのプロパティを持つ別のクラスがあり、どちらも Employee 型です。これらの両方を外部キー制約にしたいのですが、要件により、同じユーザーとの間で同じ要求の多くが許可されるため、それらをキーとして使用することはできません。Employee がナビゲーション用の 2 つのコレクションを持っていることはあまり気にしませんが、要件と思われる問題に取り組んでいます。問題が単純化されている場合は、それらを削除できます。
このメッセージが表示されます。System.Data.Entity.Edm.EdmAssociationEnd: : 関係 'Employee_RequestsForEmployee' のロール 'Employee_RequestsForEmployee_Target' では多重度が無効です。従属ロール プロパティはキー プロパティではないため、従属ロールの多重度の上限は「*」である必要があります。
コンテキストの OnModelCreation メソッドで Fluent API を使用してこれを試しました。
modelBuilder.Entity() .HasRequired(u => u.ForEmployee) .WithMany() .HasForeignKey(u => u.ForEmployeeId);
modelBuilder.Entity<RevenueTransferRequest>() .HasRequired(u => u.FromEmployee) .WithMany() .HasForeignKey(u => u.FromEmployeeId);
競合するクラスは次のとおりです (わかりやすくするためにいくつかのプロパティを削除しました)。
public class Employee : IEmployee
{
[Key]
public string Id { get; set; }
[InverseProperty("ForEmployee")]
public ICollection<RevenueTransferRequest> RequestsForEmployee { get; set; }
[InverseProperty("FromEmployee")]
public ICollection<RevenueTransferRequest> RequestsFromEmployee { get; set; }
}
public class RevenueTransferRequest : IRevenueTransferRequest
{
[Key]
public Guid Id { get; set; }
[Required]
[ForeignKey("ForEmployee")]
public String ForEmployeeId { get; set; }
[InverseProperty("RequestsForEmployee")]
public Employee ForEmployee { get; set; }
[Required]
[ForeignKey("FromEmployee")]
public String FromEmployeeId { get; set; }
[InverseProperty("RequestsFromEmployee")]
public Employee FromEmployee { get; set; }
}
どんな助けでも大歓迎です。前もって感謝します。