2009-10-05 8 views
5

वर्तमान एप्लिकेशन में मैं विकसित कर रहा हूं मैं एनआरबीनेटनेट को ओआरएम के रूप में उपयोग के लिए कॉन्फ़िगर करने के लिए फ्लुएंट एनएचबेर्नेट का उपयोग कर रहा हूं। मैं एप्लिकेशन में उपयोग किए गए सभी टेबल नामों में एक उपसर्ग जोड़ने में सक्षम होना चाहता हूं, ताकि यदि मैं किसी ऐसे डेटाबेस का उपयोग कर रहा हूं जो पहले से ही किसी अन्य एप्लिकेशन की सेवा कर रहा है, तो दो अनुप्रयोगों के बीच कोई नामकरण विवाद नहीं है।मैं सभी तालिका नामों में तालिका नाम उपसर्ग जोड़ने के लिए NHibernate (या Fluent NHib) को कैसे कॉन्फ़िगर कर सकता हूं?

तो उदाहरण के लिए यदि मैं प्रत्येक तालिका में Portal_ का उपसर्ग जोड़ना चाहता हूं, तो Users तालिका Portal_Users बन जाएगी।

बेशक

, मैं प्रत्येक मानचित्रण फ़ाइल में प्रत्येक तालिका नाम को कॉन्फ़िगर कैसे पता है, लेकिन वह वास्तव में मैं क्या कर रहा हूँ के लिए एक अच्छा समाधान नहीं है। अगर मैं कभी भी उपसर्ग बदलना चाहता था, तो मुझे प्रत्येक मैपिंग फाइलों को बदलने के लिए मजबूर होना होगा। मैं अपने कोड या कॉन्फ़िगरेशन में एक ही स्थान पर सभी तालिका नामों के उपसर्ग को जोड़ने (या बदलने) में सक्षम होना चाहता हूं।

एनएचबर्ननेट (या फ्लुएंट एनएचबेर्नेट) का उपयोग करके किसी एप्लिकेशन के भीतर सभी तालिका नामों में उपसर्ग कैसे जोड़ता है?

उत्तर

2

एक धाराप्रवाह कार्यान्वयन के लिए ..

public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator 
    { 
     public AutoPersistenceModel Generate() 
     { 
      var mappings = new AutoPersistenceModel(); 
      mappings.AddEntityAssembly(typeof(User).Assembly).Where(GetAutoMappingFilter); 
      mappings.Conventions.Setup(GetConventions()); 

..... 
    private Action<IConventionFinder> GetConventions() 
    { 
     return c => 
     { 
      c.Add<PrimaryKeyConvention>(); 
      c.Add<ReferenceConvention>(); 
      c.Add<HasManyConvention>(); 
      c.Add<TableNameConvention>(); 

......

 public class TableNameConvention : IClassConvention 
     { 
      public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance 
instance) 
      { 
       instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" + 
    instance.EntityType.Name)); 
       } 
      } 
+0

धन्यवाद, यही मुझे चाहिए –

3

आप अपनी खुद की INamingStrategy को लागू करने और अपने विन्यास के लिए यह निर्दिष्ट कर सकते हैं:

Configuration config = new Configuration(); 
config.SetNamingStrategy(new MyTablePrefixStrategy()); 
+0

जवाब के लिए धन्यवाद! –

+0

बिल्कुल वही जो मैं खोज रहा था, और इसे हासिल करने का सबसे आसान तरीका! – Sean

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