簡體   English   中英

EF 6 Fluent API,具有一對多,多對多且相互沖突的多重性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM