6

Czy istnieje sposób na utworzenie wielu instancji typu złożonego w tym samym modelu przy użyciu narzędzia Fluent api model builder?Zespół architektury obiektu składa się z wielu instancji w jednym modelu?

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

=========================================== =======================================

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 (FOUND ROZWIĄZANIE)

przypadku wielu skomplikowanych przypadków klasy typu są stosowane w tym samym modelu CF, konfiguracja z tych grup jest ustawiony na poziomie CF modelu tak:

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

Odpowiedz

1

EF 6, kod Najpierw prefiks nazwy kolumn z nazwą obiektu podczas korzystania z wielu instancji tego samego typu złożonego, jak

PersonalAddress_Street 
BusinessAddress_Street 
... 

i tak dalej. Potrzebujesz tylko odwzorowań starszych wersji EF. Opcja mapowania umożliwia również zastąpienie tych nazw wygenerowanych automatycznie czymś ładniejszym.

Również nie sądzę, jest to poprawny kod konfiguracji na podstawie modeli (literówka może?):

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