[英]EF 6 Fluent API with One to Many AND Many To Many and conflicting multiplicities
我一直無法找到這個特定問題的答案,也許是我使用Entity Framework的新穎性
我有兩個實體:用戶和設施。
設施表需要所有者(用戶),但是設施也可以有許多“設施用戶”分配給設施。
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'已配置有沖突的多重性 。
但是,當我排除“ 設施到所有者”映射時,它可以工作。
//One to Many: Facility To Owner
//modelBuilder.Entity<Facility>()
// .HasRequired<User>(s => s.Owner)
// .WithMany(s => s.Facilities)
// .HasForeignKey(k => k.OwnerId);
問題是, Facilitys表中的Owner_UserId字段為空,但是OwnerId已正確填寫。在解決“ Owner_UserId”問題之前,我的OCD不允許我繼續前進。
謝謝你D
您不能將一個集合導航屬性( Facilities
)映射到兩個關系。
為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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.