6

Fluent API 모델 빌더를 사용하여 동일한 모델 내에 복합 유형의 인스턴스를 여러 개 보유 할 수 있습니까?엔티티 프레임 워크 복합 유형 하나의 모델에 여러 인스턴스가 있습니까?

public class Contact 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public Address PersonalAddress { get; set; } 
    public Address BusinessAddress { get; set; } 
} 

public class Address 
{ 
    public string Street{ get; set; } 
    public string City{ get; set; } 
    public string PostalCode{ get; set; } 
} 


protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Configurations.Add(new ContactConfiguration()); 
    modelBuilder.Configurations.Add(new AddressConfiguration()); 
} 

=========================================== FOUND =======================================

public class AddressConfiguration : ComplexTypeConfiguration<Address> 
{ 
    public AddressConfiguration() 
    { 

     //props 
     this.Property(t => t.Street) 
      .IsOptional() 
      .HasColumnName("AddressStreet") 
      .HasMaxLength(1024); 

     this.Property(t => t.PostalCode) 
      .IsOptional() 
      .HasColumnName("AddressPostalCode") 
      .HasMaxLength(64); 

     this.Property(t => t.City) 
      .IsOptional() 
      .HasColumnName("AddressCity") 
      .HasMaxLength(512); 
    } 
} 

EDIT (다중 복합 형 클래스 인스턴스가 동일한 CF 모델에 사용하는 경우, 용액)

는 이러한 클래스의 구성은 다음과 같이 CF 모델 레벨에서 설정된다

public class ContactConfiguration : EntityTypeConfiguration<Contact> 
{ 
    public ContactConfiguration() 
    { 

     //props for PersonalAddress instance of Address complex type class 
     this.Property(t => t.PersonalAddress.Address.Street) 
      .HasColumnName("PersonalAddressStreet"); 

     this.Property(t => t.PersonalAddress.Address.PostalCode) 
      .HasColumnName("PersonalAddressPostalCode"); 

     this.Property(t => t.PersonalAddress.Address.City) 
      .HasColumnName("PersonalAddressCity"); 


     //props for BusinessAddress instance of Address complex type class 
     this.Property(t => t.BusinessAddress.Address.Street) 
      .HasColumnName("BusinessAddressStreet"); 

     this.Property(t => t.BusinessAddress.Address.PostalCode) 
      .HasColumnName("BusinessAddressPostalCode"); 

     this.Property(t => t.BusinessAddress.Address.City) 
      .HasColumnName("BusinessAddressCity"); 
    } 
} 
,745 이 같은 복잡한 유형의 여러 인스턴스를 사용할 때 EF

답변

1

, 코드 먼저 등등

PersonalAddress_Street 
BusinessAddress_Street 
... 

와 같은, 당신의 속성 이름과 열 이름을 접두사합니다. 이전 버전의 EF 만 매핑하면됩니다. 매핑 옵션을 사용하면 자동 생성 된 이름을 더 멋진 것으로 바꿀 수 있습니다.

또한, 나는 이것이 당신의 모델을 기반으로 올바른 구성 코드라고 생각하지 않습니다 (아마 오타?) :

this.Property(t => t.PersonalAddress.Address.Street) 
// should be 
this.Property(t => t.PersonalAddress.Street)