Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL सर्वर और Microsoft SQL सर्वर 2008 दोनों के साथ NHibernate का उपयोग कैसे करें

मैंने कुछ महीने पहले काफी संघर्ष किया है। मेरी समस्या एमएस एसक्यूएल सर्वर और ओरेकल के साथ थी।

मैंने जो किया है वह निबर्ननेट के लिए दो अलग-अलग कॉन्फिग फाइल बनाने के लिए है:

sql.nhibernate.config

<?xml version="1.0" encoding="utf-8"?>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
      <reflection-optimizer use="false" />
      <session-factory name="BpSpedizioni.MsSql">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <!-- <property name="connection.connection_string">Data Source=(local); Initial Catalog=NHibernate; Trusted_Connection=true;</property> -->
        <property name="current_session_context_class">web</property>
        <property name="adonet.batch_size">100</property>
        <property name="command_timeout">120</property>
        <property name="max_fetch_depth">3</property>
        <property name='prepare_sql'>true</property>
        <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
        <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
        <mapping assembly="BpSpedizioni.Services"/>
      </session-factory>
</hibernate-configuration>

ora.nhibernate.config

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <reflection-optimizer use="false" />
  <session-factory name="BpSpedizioni.Oracle">
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <!-- <property name="connection.connection_string">Data Source=(local); Initial Catalog=NHibernate; Trusted_Connection=true;</property> -->
    <property name="current_session_context_class">web</property>
    <property name="adonet.batch_size">100</property>
    <property name="command_timeout">120</property>
    <property name="max_fetch_depth">3</property>
    <property name='prepare_sql'>true</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <mapping assembly="BpSpedizioni.Services"/>
  </session-factory>
</hibernate-configuration>

मैं अपनी निबर्ननेट सत्र फैक्ट्री बनाने के लिए इस सरल वर्ग का उपयोग करता हूं:

    public class NHibernateSessionFactory
    {
        private ISessionFactory sessionFactory;

        private readonly string ConnectionString = "";
        private readonly string nHibernateConfigFile = "";

        public NHibernateSessionFactory(String connectionString, string nHConfigFile)
        {
            this.ConnectionString = connectionString;
            this.nHibernateConfigFile = nHConfigFile;
        }

        public ISessionFactory SessionFactory
        {
            get { return sessionFactory ?? (sessionFactory = CreateSessionFactory()); }
        }

        private ISessionFactory CreateSessionFactory()
        {
            Configuration cfg;
            cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.nHibernateConfigFile));

            // With this row below Nhibernate searches for the connection string inside the App.Config.
            // cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
            cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, this.ConnectionString);

#if DEBUG
            cfg.SetProperty(NHibernate.Cfg.Environment.GenerateStatistics, "true");
            cfg.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true");
#endif

            return (cfg.BuildSessionFactory());
        }
    }

जैसा कि आप देख सकते हैं कि मैं अपने NHibernateSessionFactory को एक कनेक्शन स्ट्रिंग (मैं इसे अपनी ऐप कॉन्फ़िगरेशन फ़ाइल में सहेजना पसंद करता हूं) और निबर्ननेट कॉन्फ़िगरेशन फ़ाइल का नाम (पथ के बिना) पास करता हूं।

मैं व्यक्तिगत रूप से एक DI कंटेनर (स्ट्रक्चर मैप) का उपयोग करता हूं और आप रजिस्ट्री वर्ग को परिभाषित करते हुए कुछ बहुत अच्छा हासिल कर सकते हैं:

public class NhibernateRegistry : Registry
{
    public NhibernateRegistry()
    {

        For<ISessionFactory>()
        .Singleton()
        .Add(new NHibernateSessionFactory(<oracle connection string>, "ora.nhibernate.config").SessionFactory)
        .Named("OracleSF");

        For<ISession>()
        .HybridHttpOrThreadLocalScoped()
        .Add(o => o.GetInstance<ISessionFactory>("OracleSF").OpenSession())
        .Named("OracleSession");

        For<ISessionFactory>()
        .Singleton()
        .Add(new NHibernateSessionFactory(<ms sql connection string>, "sql.nhibernate.config").SessionFactory)
        .Named("MsSqlSF");

        For<ISession>()
        .HybridHttpOrThreadLocalScoped()
        .Add(o => o.GetInstance<ISessionFactory>("MsSqlSF").OpenSession())
        .Named("MsSqlSession");
    }
}

जिसमें आप नामित उदाहरणों का उपयोग कर सकते हैं। मेरी सेवाओं की परत एक स्ट्रक्चर मैप रजिस्ट्री क्लास का उपयोग करती है जहां आप कंस्ट्रक्टर्स को परिभाषित कर सकते हैं:

this.For<IOrdersService>()
     .HybridHttpOrThreadLocalScoped()
     .Use<OrdersService>()
     .Ctor<ISession>("sessionMDII").Is(x => x.TheInstanceNamed("OracleSession"))
     .Ctor<ISession>("sessionSpedizioni").Is(x => x.TheInstanceNamed("MsSqlSession"));

आपके सेवा कार्यान्वयन के लिए:

public class OrdersService : IOrdersService
{
        private readonly ISession SessionMDII;
        private readonly ISession SessionSpedizioni;

        public OrdersService(ISession sessionMDII, ISession sessionSpedizioni)
        {
            this.SessionMDII = sessionMDII;
            this.SessionSpedizioni = sessionSpedizioni;
        }

    ...
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में मार्जिन की गणना कैसे करें

  2. मारियाडीबी - माईएसक्यूएल - सभी उपलब्ध और समर्थित इंजन प्रदर्शित करने के लिए इंजन दिखाएं

  3. Bcrypt पासवर्ड से लॉगिन सत्यापित करें

  4. MySQL उन सभी पंक्तियों को हटा देता है जहाँ आईडी दी गई संख्या से अधिक है

  5. PHP का उपयोग करके एक MySQL डेटाबेस टेक्स्ट फ़ील्ड में लाइन ब्रेक के साथ टेक्स्ट स्ट्रिंग को कैसे सहेजना है?