2017-05-14 5 views
0

많은 충돌하는 다중도 많은 많은으로 한 6 유창함 API 저는 두 엔티티가 : 사용자를 및 시설.EF 내가 엔티티 프레임 워크</p> <p>내 새로움에 아마, 이러한 특정 문제에 대한 답을 찾을 수 없어

시설 테이블에는 소유자 (사용자)가 필요하지만 시설에는 시설에 많은 "시설 사용자"가 할당 될 수도 있습니다. 여기

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; } 
} 

내 모델 빌더입니다

////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); 

문제는 그 소유자에지도 시설이있을 때, 나는 다음과 같은 오류가 있습니다 : 탐색 속성 'FacilityUsers가' '유형에 선언을 MEH.Web.Models.Entities.Facility '는 상충되는 다중도으로 구성되었습니다.

그러나 시설을 소유자 매핑에서 제외하면 작동합니다.

//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가 제대로 채워집니다. I가 해결 될 때까지 나의 OCD 날에 이동하지 않습니다 "Owner_UserId"문제.

당신은 관계 하나 컬렉션을 탐색 속성 (Facilities)를 매핑 할 수 없습니다 D

답변

1

, 감사합니다.

public class User 
{ 
    .... 
    public virtual ICollection<Facility> Facilities { get; set; } 
    public virtual ICollection<Facility> OwnedFacilities { get; set; } 
} 

및 매핑 :

어느 one-to-many 관계를 다른 모음을 추가

//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); 
+0

대단히 감사합니다! ** WillCascadeOnDelete (false) **를 추가해야했습니다. –