6

क्या फ्लुएंट एपीआई मॉडल निर्माता का उपयोग कर एक ही मॉडल के अंदर जटिल प्रकार के जटिल उदाहरण होने का कोई तरीका है?इकाई फ्रेमवर्क जटिल प्रकार एक मॉडल में कई उदाहरण?

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

संपादित करें (FOUND समाधान)

कई जटिल प्रकार वर्ग उदाहरणों में एक ही सीएफ मॉडल में उपयोग किया जाता है, तो इन वर्गों के विन्यास इस तरह सीएफ मॉडल स्तर पर सेट है:

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

उत्तर

1

एफई 6 के साथ, कोड प्रथम स्तंभ नाम अपने गुण नाम के साथ, जैसे

PersonalAddress_Street 
BusinessAddress_Street 
... 

और इतने पर उपसर्ग जब आप एक ही जटिल प्रकार के कई उदाहरण का उपयोग करेगा। आपको केवल ईएफ के पुराने संस्करणों की मैपिंग की आवश्यकता है। मैपिंग विकल्प आपको इन ऑटोजेनरेटेड नामों को कुछ अच्छे से बदलने की अनुमति देता है।

इसके अलावा, मुझे नहीं लगता कि यह अपने मॉडल के आधार पर सही विन्यास कोड है (टाइपो शायद?):

this.Property(t => t.PersonalAddress.Address.Street) 
// should be 
this.Property(t => t.PersonalAddress.Street) 
संबंधित मुद्दे