2009-10-12 12 views
5

एनएचबेर्नेट (या फ्लुएंट-एनएचबेर्नेट के साथ) में कोई तालिका मौजूद है या नहीं, यह जांचने का सबसे अच्छा, सबसे संगत तरीका क्या है?आप कैसे जांचते हैं कि कोई तालिका NHibernate (या Fluent) के साथ मौजूद है या नहीं?

क्या यह भी संभव है? मेरा मतलब है कि ऐसा भारी कर्तव्य ओआरएम के लिए एक साधारण काम की तरह लगता है।

इसके अलावा एक संबंधित प्रश्न पर, क्या आप जांच सकते हैं कि टेबल का एक सेट या संपूर्ण स्कीमा NHibernate के साथ मौजूद है या नहीं?

+0

आप अपने मानचित्रण के विरूद्ध उसकी जांच देख रहे हैं? –

+0

किसी भी तरह से, मैं देखना चाहता हूं कि भौतिक तालिका मौजूद है या नहीं। –

उत्तर

12

आप आप NHibernate विन्यास कहीं स्टोर या इसे करते हैं इससे पहले कि आप अपने सत्र फैक्टरी का निर्माण यह उत्पन्न मान्य करने के लिए संभव है डेटाबेस के खिलाफ स्कीमा।

public void ValidateSchema(Configuration config) 
    { 
     new SchemaValidator(config).Validate(); 
    } 
+0

अच्छा, मैं इस तरह की चीज़ की तलाश में था –

3

मैंने SchemaUpdate के लिए स्रोत कोड में देखा। मुझे पता था कि SchemaUpdate एक लापता टेबल का पता लगा सकता है और फिर एक अद्यतन स्क्रिप्ट के बजाय एक निर्माण स्क्रिप्ट उत्पन्न कर सकता है। निश्चित रूप से, जवाब वहां था।

GetTableMetadataNHibernate.Tool.hbm2ddl.DatabaseMetadata में फ़ंक्शन डेटाबेस में मौजूद नहीं होने पर शून्य वापस आ जाएगा।

आम तौर पर, SchemaUpdate डेटाबेस मेटाडेटा ऑब्जेक्ट बनाता है और Configuration ऑब्जेक्ट में जाता है। लेकिन ऐसा लगता है कि आपको डेटाबेस मेटाडेटा बनाने की आवश्यकता है, एक डीबीसी कनेक्शन और डायलेक्ट ऑब्जेक्ट है।

SchemaUpdate एक DatabaseMetadata thusly बनाता है:

connectionHelper.Prepare(); 
connection = connectionHelper.Connection; 
meta = new DatabaseMetadata(connection, dialect); 

NHibernate.Cfg.Configuration तो कॉल

ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(...); 
2

यह सवाल और जवाब गूगल में हर जगह ऊपर पॉप जब इस तरह के एक समाधान के लिए खोज है, तो मैंने सोचा कि मैं डाल क्या एक और अधिक सटीक और संक्षिप्त में काम मेरे लिए [सवालों उम्र, सबसे अधिक संभावना एक अतिरिक्त के कारण] तौर तरीका; "IsTable":

var configuration = Fluently.Configure() 
    .Database(MsSqlConfiguration 
    .MsSql2008 
    ... 
    .BuildConfiguration(); 

    var session = configuration.BuildSessionFactory().OpenSession(); 

    DatabaseMetadata meta = new DatabaseMetadata((DbConnection)session.Connection, new NHibernate.Dialect.MsSql2008Dialect()); 
    //TABLE_NAME e.g. "hibernate_unique_key" 
     if (meta.IsTable("TABLE_NAME")) 
     { 
     ... 

आशा है कि किसी को मदद मिलती है क्योंकि मैं इस पर ठोकर से पहले ऊपर के समान एक जटिल रणनीति को लागू किया;)

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

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