0

나는 많은 것을 할 수 있지만 완전히 얻을 수는 없다. here 나는 유용한 정보를 찾지 만 성공하지는 못했다. 아래는 제 질문입니다엔티티 프레임 워크 5에서 일대일/일대일 및 일대 다 관계 모두

아래 클래스가 있으며 엔티티 모델에서 관계를 지정하는 방법이 필요합니다.

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public int? HomeAddressId { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual Address HomeAddress{ get; set; } 
} 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

각 사용자는 많은 주소를 갖고 각 주소는 하나의 사용자 (일대 다)와 연결됩니다. 주소 중 하나가 집 주소이므로 사용자에게 HomeAddres (선택 사항)가 있습니다. HomeAddressId는 FK (nullable) to Address 테이블입니다. 먼저 Fluent API 메소드에서 엔티티 모델 코드에서이 관계를 어떻게 정의합니까?

+0

코드를 복사하여 여기에 붙여 넣으십시오. 잘못된 정의가 있습니다. Adress의 사용자입니다. 나는 그것을 바꿨다. 이 코드는 작동해야합니다. 추가적으로 모델을 변경할 수 있습니다. 주소는 모든 주소를 수집합니다. 주소의 AddresType 구성원으로 유형별로 주소를 구분할 수 있습니다. –

답변

0

코드를 쉽게 표시하는 것을 선호합니다.

public class User 
    { 
     [Key] 
     public int UserId { get; set; } 
     public int? HomeAddressId { get; set; } 

     public virtual ICollection<Address> Addresses { get; set; } 
     public Address HomeAddress { 
      get { 
       if(Addresses != null) 
        return Addresses.FirstOrDefault(p=> p.AddressType.Home); 
       return null; 
      } 
     } 
    } 
    public enum AddressType 
    { 
     Unknown, 
     Home, 
     Office 
    } 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 
    public AddressType AddressType {get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

두 번째 유창.

public class User 
{ 
    public int UserId { get; set; } 
    public virtual Address HomeAddress { get; set; } 
    public virtual int? HomeAddressId { get; set; } 
    public virtual ICollection<Address> OfficeAddresses { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string AddressLine1 { get; set; } 
} 

public class UserMap : MapEntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     //Other definitions PK etc... 

     this.HasOptional(o => o.HomeAddress) 
       .WithMany() 
       .HasForeignKey(a => a.HomeAddressId); 

     this.HasMany(t => t.OfficeAddresses) 
      .WithMany() 
      .Map(m => 
      { 
       m.ToTable("UserOfficeAddresses"); 
       m.MapLeftKey("AddressId"); 
       m.MapRightKey("UserId"); 
      }); 
    } 
} 
//and define Address Configurations.. MapEntityTypeConfiguration<Address> 
+0

아마도 이것으로 질문을 해결할 수 있지만 내 접근 방식에 따라 주소를 추가하지 않으려합니다. 문제는 사용자 개체에 HomeAddressId를 가지고 사용하는 것입니다. –

+0

나는 본다. 그것은 단지 간단하고 쉬운 솔루션입니다. 다른 akternatives 당신은 유창 API를 사용하여 관계를 정의해야합니다. 나는 그것을 awswer하려고합니다. ;) –

+0

두 번째 물어보십시오. –