2012-09-28 18 views
10

मैं 'pe_' की तरह एक उपसर्ग के साथ डेटाबेस में सभी तालिकाओं जोड़ना चाहते हैं, तो एक वर्ग और एक मेज के बीच मानचित्रण की तरह यह होगा: श्रेणी (pe_Category), उत्पाद (pe_Product), आदिप्रथम विश्व स्तर पर इकाई फ्रेमवर्क कोड में टेबल उपसर्ग कैसे जोड़ें?

मैं पता है कि एक ही नक्शे के साथ, मैं इस तरह कर सकते हैं:

[Table("pe_Category")] 
public class Category 
{ 
    public int CategoryId { get; set; } 
} 

लेकिन मैं इसे वहाँ शायद कारण संस्थाओं के सैकड़ों है पसंद नहीं है।

तो मैं उपसर्ग विश्व स्तर पर डालने का एक तरीका खोजने कर रहा हूँ, बस इस तरह:

public class Category 
{ 
    public int CategoryId { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
} 

// Global config, will affect all entities 
table.Name = "pe_" + Class.TypeName ; 

किसी मेरी मदद कर सकते?

1) एक वर्ग नाम "DefaultTableConvention" बनाएँ:

उत्तर

22

अब मैं इकाई की रूपरेखा 6 अल्फा के साथ एक समाधान खोजने के है

public class DefaultTableConvention 
: IConfigurationConvention<Type, EntityTypeConfiguration> 
{ 
    public void Apply(
     Type type, 
     Func<EntityTypeConfiguration> configuration) 
    {    
     configuration().ToTable("PE_" + type.Name); 
    } 
} 

2) DbContext में, नीचे दिए गए कोड जोड़ें:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Add<DefaultTableConvention>(); 
    } 

और यह सब कुछ है, यह डीबीकॉन्टेक्स्ट में जोड़े गए सभी इकाइयों को प्रभावित करेगा। विवरण: http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

अद्यतन: अब EF6 के साथ, वहाँ एक आसान तरीका है, जो "लाइटवेट विन्यास" कहा जाता है, यहाँ कोड है:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Types().Configure(entity => entity.ToTable("PE" + entity.ClrType.Name)); 
    } 
+1

से प्रकार संस्थाओं बदल pluralised जा रहा है यह भी नाम रोक सकते हैं? –

11
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entities().Configure(entity 
     => entity.ToTable("PE" + entity.ClrType.Name)); 
} 

केवल ef6 बीटा पर काम करता है -1; माइक्रोसॉफ्ट ef6-RC1

http://blogs.msdn.com/b/adonet/archive/2013/08/21/ef6-release-candidate-available.aspx#10444012

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Types().Configure(entity 
     => entity.ToTable("PE" + entity.ClrType.Name)); 
} 
+0

मैंने आपके दूसरे कोड उदाहरण की कोशिश की है, लेकिन अगर मैं 'बेस। ओनमोडेल क्रिएटिंग (मॉडलबिल्डर) छोड़ देता हूं तो मुझे त्रुटियां मिलती हैं;' हालांकि, अगर मैं इसे कॉन्फ़िगरेशन लाइन के पहले या बाद में डालता हूं, तो जब मैं एड-माइग्रेशन करता हूं तो मेरी टेबल मचान में नाम नहीं बदलती हैं। मैं एक नया उपसर्ग जोड़ने के लिए AspNet तालिकाओं का नाम बदलने की कोशिश कर रहा हूं । वे बस वही रहते हैं। – damccull

संबंधित मुद्दे