6

Fluent API model oluşturucu kullanılarak aynı modelde birden fazla karmaşık türde örneğe sahip olmanın bir yolu var mı?Varlık çerçeve karmaşık bir modelde birden çok örneğini mi?

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

=========================================== BULUNAN =======================================

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

DÜZENLEME (birden çok karmaşık tip sınıfı örnekleri aynı CF Modelinde kullanıldığında ÇÖZÜM)

, bu sınıfların yapılandırması aşağıdaki gibi CF modeli seviyede ayarlanır:

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"); 
    } 
} 
Aynı karmaşık tür birden çok örneğini kullandığınızda EF 6 ile

cevap

1

, Kod İlk vb

PersonalAddress_Street 
BusinessAddress_Street 
... 

ve gibi, Mülkiyet adıyla sütun adları önek. Yalnızca EF'nin eski sürümlerine eşleme yapmanız gerekir. Eşleme seçeneği, bu otomatik olarak oluşturulmuş isimleri daha güzel bir şekilde değiştirmenize de olanak tanır.

Ayrıca, bu modellere dayalı doğru yapılandırma kodu olduğunu düşünmüyorum (belki yazım hatası?):

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