この特定の問題に対する答えを見つけることができませんでした。おそらく私の Entity Framework の新しさから
ユーザーと施設という 2 つのエンティティがあります。
ファシリティ テーブルには所有者 (ユーザー) が必要ですが、ファシリティには多くの「FacilityUsers」をファシリティに割り当てることもできます。
public class User
{
....
public virtual ICollection<Facility> Facilities { get; set; }
}
public Facility Facility
{
public Guid OwnerId { get; set; }
...
public virtual User Owner { get; set; }
public virtual ICollection<User> FacilityUsers { get; set; }
}
ここに私のModelBuilderがあります
////Many To Many: Users To Facilities
modelBuilder.Entity<User>()
.HasMany(i => i.Facilities)
.WithMany(u => u.FacilityUsers)
.Map(m =>
{
m.MapLeftKey("UserId");
m.MapRightKey("FacilityId");
m.ToTable("UserFacility");
});
//One to Many: Facility To Owner
modelBuilder.Entity<Facility>()
.HasRequired<User>(s => s.Owner)
.WithMany(s => s.Facilities)
.HasForeignKey(k => k.OwnerId);
問題は、Facility から Owner へのマップがある場合、次のエラーが表示されることです。タイプ 'MEH.Web.Models.Entities.Facility' で宣言されたナビゲーション プロパティ 'FacilityUsers' は、競合する multiplicities で構成されています。
ただし、ファシリティからオーナーへのマッピングを除外すると、機能します。
//One to Many: Facility To Owner
//modelBuilder.Entity<Facility>()
// .HasRequired<User>(s => s.Owner)
// .WithMany(s => s.Facilities)
// .HasForeignKey(k => k.OwnerId);
問題は、施設テーブルにnull のOwner_UserIdフィールドがあるが、OwnerIdが正しく入力されていることです。「Owner_UserId」の問題を解決するまで、OCD では先に進めません。
ありがとう、D
1 つのコレクション ナビゲーション プロパティ ( Facilities
) を2 つの関係にマップすることはできません。
one-to-many
関係に別のコレクションを追加するか:
public class User
{
....
public virtual ICollection<Facility> Facilities { get; set; }
public virtual ICollection<Facility> OwnedFacilities { get; set; }
}
そしてそれをマッピングします:
//One to Many: Facility To Owner
modelBuilder.Entity<Facility>()
.HasRequired(s => s.Owner)
.WithMany(s => s.OwnedFacilities) // <- another collection
.HasForeignKey(k => k.OwnerId);
または、User
モデルを現状のままにしますが、one-to-many
関係を単方向(コレクション ナビゲーション プロパティなし)として設定します。
//One to Many: Facility To Owner
modelBuilder.Entity<Facility>()
.HasRequired(s => s.Owner)
.WithMany() // <- no collection
.HasForeignKey(k => k.OwnerId);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加