AMcoder - javascript, python, java, html, php, sql

Ինչպե՞ս կարող եմ դիտել SQL-ը, որը ստեղծվում է nHibernate-ի կողմից:

Ինչպե՞ս կարող եմ դիտել SQL-ը, որը ստեղծվում է nHibernate-ի կողմից: տարբերակ 1.2

24.09.2008

Պատասխանները:


1

Դուք կարող եք նման բան տեղադրել ձեր app.config/web.config ֆայլում.

configSections հանգույցում.

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>

կազմաձևման հանգույցում.

<log4net>
  <appender name="NHibernateFileLog" type="log4net.Appender.FileAppender">
    <file value="logs/nhibernate.txt" />
    <appendToFile value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
    </layout>
  </appender>
  <logger name="NHibernate.SQL" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="NHibernateFileLog"/>
  </logger>
</log4net>

Եվ մի մոռացեք զանգահարել

log4net.Config.XmlConfigurator.Configure();

ձեր դիմումի սկզբում կամ դնելու համար

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

assemblyinfo.cs-ում

Կազմաձևման կարգավորումներում սահմանեք «show_sql» հատկությունը true:

24.09.2008
  • Ես գտա, որ SQL-ը գրանցված է DEBUG մակարդակում, այնպես որ դուք կարող եք համոզվել, որ ձեր լոգերի մակարդակը DEBUG է: 30.03.2011
  • Իմ վերջնական նպատակն է կարդալ sql NHibernate-ից, տես այստեղ մեկ այլ գրառում 23.11.2011
  • Կազմաձևման կարգավորումներ: Որտեղ է դա? Ցանկանում եմ իմանալ, թե որտեղ պետք է սահմանել show_sql: 17.04.2013
  • սա ձմեռման կոնֆիգուրացիայի xml ֆայլում է: mkyong.com/hibernate / 29.08.2016
  • Նույնը կարելի է հասնել NHibernate-ի նոր տարբերակների կոդով: Ես դա բացատրել եմ իմ պատասխանում: 05.01.2021

  • 2

    Կազմաձևման կարգավորումներում սահմանեք «show_sql» հատկությունը true: Սա կհանգեցնի SQL-ի թողարկմանը NHibernate-ի logfiles-ում log4net-ի կողմից:

    24.09.2008
  • Հաճելի է։ Ես մոռացել էի այդ մասին։ սեղմեք 24.09.2008
  • Սա ինձ համար ամբողջական SQL չի ցուցադրում: Ես տեսնում եմ ոչ իրական արժեքներ, մոտավորապես այսպիսին է՝ « SELECT application0_.ApplicationId as app===App1_101_1_, application0_.ApplicationNumberCounty as ApplicationNu2_101_1...»: 28.03.2016

  • 3

    Ես մի քիչ ուշացել եմ, գիտեմ, բայց սա հնար է անում, և դա գործիք/db/framework անկախ է: Այդ վավեր տարբերակների փոխարեն ես օգտագործում եմ NH Interceptors:

    Սկզբում ներդրեք դաս, որը ընդլայնում է NHibernate.EmptyInterceptor և իրականացնում NHibernate.IInterceptor:

    using NHibernate;
    
    namespace WebApplication2.Infrastructure
    {
        public class SQLDebugOutput : EmptyInterceptor, IInterceptor
        {
            public override NHibernate.SqlCommand.SqlString
               OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
            {
                System.Diagnostics.Debug.WriteLine("NH: " + sql);
    
                return base.OnPrepareStatement(sql);
            }
        }
    }
    

    Այնուհետև, պարզապես անցեք մի օրինակ, երբ բացում եք ձեր նիստը: Համոզվեք, որ դա արեք միայն DEBUG-ում.

    public static void OpenSession() {
    
    #if DEBUG
        HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession(new SQLDebugOutput());
    
    #else
        HttpContext.Current.Items[SessionKey] = _sessionFactory.OpenSession();
                
    #endif
    }
    

    Եվ վերջ։

    Այսուհետ ձեր sql հրամանները նման են...

     var totalPostsCount = Database.Session.Query<Post>().Count();
     
     var currentPostPage = Database.Session.Query<Post>()
            .OrderByDescending(c => c.CreatedAt)
            .Skip((page - 1) * PostsPerPage)
            .Take(PostsPerPage)
            .ToList();
    

    .. ցուցադրվում են ուղիղ ձեր ելքային պատուհանում.

    NH. ընտրեք cast(count(*) որպես INT) որպես col_0_0_ հաղորդագրություններից0_

    NH: Ընտրեք post0_.Id AS ID3_, post0_.user_id որպես user2

     var totalPostsCount = Database.Session.Query<Post>().Count();
     
     var currentPostPage = Database.Session.Query<Post>()
            .OrderByDescending(c => c.CreatedAt)
            .Skip((page - 1) * PostsPerPage)
            .Take(PostsPerPage)
            .ToList();
    
    . գրառումներից post0_ պատվիրել ըստ post0_.created_at desc limit ? օֆսեթ ?

    20.04.2016
  • Սա անում է հնարքը: Ես կցանկանայի ավելացնել, որ նոր API-ն sessionFactory.WithOptions().Interceptor(new SQLDebugOutput()).OpenSession() է: Այս կերպ, եթե մենք բացի սրանից ավելի շատ ընդհատողներ ունենանք, մենք կարող ենք պարզապես շղթայել դրանք ձեր Interceptor-ի հետևից: 29.02.2020

  • 4

    Օգտագործեք sql սերվերի պրոֆիլը:

    ԽՄԲԱԳՐԵԼ (1 տարի անց). Ինչպես ստորև նշում է @Toran Billups-ը, NHibernate պրոֆիլի հեղինակ Այենդեն գրել է, որ շատ հիանալի է:

    24.09.2008

    5

    Կարող եք նաև փորձել NHibernate Profiler (30 օր փորձաշրջան, եթե այլ բան չկա): Այս գործիքը լավագույնն է IMHO-ի շուրջ:

    Սա ոչ միայն ցույց կտա ստեղծված SQL-ը, այլ նաև նախազգուշացումներ/առաջարկություններ/և այլն

    12.10.2009
  • Չի աշխատում SQL CE-ի հետ (չնայած որ այն գովազդվում է որպես այդպիսին), պարզապես FYI 10.06.2016

  • 6

    NHibernate գրանցման համար լավ հղում կա՝ Ինչպես կարգավորել Log4Net-ը NHibernate-ի հետ օգտագործելու համար: Այն ներառում է տեղեկատվություն NHibernate-ի կողմից ստեղծված SQL բոլոր հայտարարությունների գրանցման մասին:

    24.09.2008

    7

    Nhibernate Profiler տարբերակն է, եթե դուք պետք է որևէ լուրջ բան անեք:

    12.10.2009

    8

    Եթե ​​դուք օգտագործում եք SQL Server (ոչ Express), կարող եք փորձել SQL Server Profiler-ը:

    31.07.2014

    9

    Կամ, եթե ցանկանում եք ցույց տալ կոնկրետ հարցման SQL, օգտագործեք հետևյալ մեթոդը (առաջարկվածի մի փոքր փոփոխված տարբերակը այստեղ Ռիկարդո Պերեսի):

    private String NHibernateSql(IQueryable queryable)
    {
      var prov = queryable.Provider as DefaultQueryProvider;
      var session = prov.Session as ISession;
    
      var sessionImpl = session.GetSessionImplementation();
      var factory = sessionImpl.Factory;
      var nhLinqExpression = new NhLinqExpression(queryable.Expression, factory);
      var translatorFactory = new NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory();
      var translator = translatorFactory.CreateQueryTranslators(nhLinqExpression, null, false, sessionImpl.EnabledFilters, factory).First();
      var sql = translator.SQLString;
    
      var parameters = nhLinqExpression.ParameterValuesByName;
      if ( (parameters?.Count ?? 0) > 0)
      {
        sql += "\r\n\r\n-- Parameters:\r\n";
        foreach (var par in parameters)
        {
          sql += "-- " + par.Key.ToString() + " - " + par.Value.ToString() + "\r\n";
        }
      }
    
      return sql;
    }
    

    և փոխանցիր դրան NHibernate հարցում, այսինքն.

    var query = from a in session.Query<MyRecord>()
      where a.Id == "123456" 
      orderby a.Name
      select a;
    
    var sql = NHibernateSql(query);
    
    17.06.2020

    10

    Դուք խնդրում եք միայն դիտելու համար; բայց այս պատասխանը բացատրում է, թե ինչպես մուտքագրել այն ֆայլ: Մուտք գործելուց հետո այն կարող եք դիտել ցանկացած տեքստային խմբագրիչում:

    NHibernate-ի վերջին տարբերակները աջակցում են կոդի միջոցով մուտքագրելու հնարավորություն: Ստորև բերված է օրինակելի կոդը, որը ցույց է տալիս դա: Խնդրում ենք կարդալ մեկնաբանությունները ավելի լավ հասկանալու համար:

    Configuration configuration = new Configuration();
    
    configuration.SetProperty(NHibernate.Cfg.Environment.Dialect, ......);
    //Set other configuration.SetProperty as per need
    configuration.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true"); //Enable ShowSql
    configuration.SetProperty(NHibernate.Cfg.Environment.FormatSql, "true"); //Enable FormatSql to make the log readable; optional.
    
    configuration.AddMapping(......);
    configuration.BuildMappings();
    
    ISessionFactory sessionFactory = configuration.BuildSessionFactory();
    
    //ISessionFactory is setup so far. Now, configure logging.
    Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(Assembly.GetEntryAssembly());
    hierarchy.Root.RemoveAllAppenders();
    
    FileAppender fileAppender = new FileAppender();
    fileAppender.Name = "NHFileAppender";
    fileAppender.File = logFilePath;
    fileAppender.AppendToFile = true;
    fileAppender.LockingModel = new FileAppender.MinimalLock();
    fileAppender.Layout = new PatternLayout("%d{yyyy-MM-dd HH:mm:ss}:%m%n%n");
    fileAppender.ActivateOptions();
    
    Logger logger = hierarchy.GetLogger("NHibernate.SQL") as Logger;
    logger.Additivity = false;
    logger.Level = Level.Debug;
    logger.AddAppender(fileAppender);
    
    hierarchy.Configured = true;
    

    Դուք կարող եք հետագայում խաղալ FileAppender-ի և Logger-ի հետ՝ ըստ ձեր կարիքի: Խնդրում ենք այցելել այս պատասխանը և այս ռեսուրսը լրացուցիչ մանրամասների համար: Սա բացատրում է նույնը XML կոնֆիգուրացիայի դեպքում. բայց նույնը պետք է հավասարապես վերաբերվի ծածկագրին:

    05.01.2021
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..