<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SQL Server</title>
        <link>http://blogs.ugidotnet.org/martinobordin/category/SQL Server.aspx</link>
        <description>My adventures in the SQL Server world</description>
        <language>it</language>
        <copyright>Martino Bordin</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Intercettare l'esecuzione di query con Entity Framework Code First</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2015/06/16/intercettare-lesecuzione-di-query-con-entity-framework-code-first.aspx</link>
            <description>Recentemente ho avuto la necessità di intercettare e manipolare le query generate da Entity Framework. 
In particolare dovevo assicurarmi che non venissero estratte dal database le entità la cui proprietà Disabled fosse true (cancellazione logica). 
Dalla versione 6 è possibile innestarsi nella pipeline di EntityFramework ereditando dalla classe DefaultExpressionVisitor ed eseguento l'override del metodo Visit, che si occupa di generare l'expression tree che poi verrà convertito in SQL.
    Sostanzialmente, se il tipo di entità ha una proprietà Disabled, imposto un filtro verificando che non sia uguale a true.
Per iniettare questo comportamento nella pipeline, basta implementare l'interfaccia IDbCommandTreeInterceptor e aggiungerla mediante il metodo DbInterception.Add(new SoftDeleteInterceptor()).  
 ;
Ora ogni query di EntityFramework non estrarrà le entità disabilitate. 
La cosa è molto utile anche in caso di estrazioni di alberi di oggetti, in quanto se un'entità disabilitata, non si otterrano neanche le entità children, in quanto viene a mancare la condizione di join.&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/102014.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2015/06/16/intercettare-lesecuzione-di-query-con-entity-framework-code-first.aspx</guid>
            <pubDate>Tue, 16 Jun 2015 11:21:08 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2015/06/16/intercettare-lesecuzione-di-query-con-entity-framework-code-first.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/102014.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/102014.aspx</trackback:ping>
        </item>
        <item>
            <title>Transazioni attive su SQL Server</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2012/02/28/transazioni-attive-su-sql-server.aspx</link>
            <description>Recentemente  mi è tornato utile avere l’elenco delle transazioni attive con il relativo statemente T-SQL.  Ecco la query che ho utilizzato:     SELECT s_tst.[session_id],          s_es.[login_name] AS [Login Name],           DB_NAME (s_tdt.database_id) AS [Database],           s_tdt.[database_transaction_begin_time] AS [Begin Time],           s_tdt.[database_transaction_log_record_count] AS [Log Records],           s_tdt.[database_transaction_log_bytes_used] AS [Log Bytes],           s_tdt.[database_transaction_log_bytes_reserved] AS [Log Rsvd],           s_est.[text] AS [Last T-SQL Text],           s_eqp.[query_plan] AS [Last Plan]        FROM sys.dm_tran_database_transactions s_tdt           JOIN sys.dm_tran_session_transactions s_tst              ON s_tst.[transaction_id] = s_tdt.[transaction_id]           JOIN sys.[dm_exec_sessions] s_es              ON s_es.[session_id] = s_tst.[session_id]           JOIN sys.dm_exec_connections s_ec              ON s_ec.[session_id] = s_tst.[session_id]           LEFT OUTER JOIN sys.dm_exec_requests s_er              ON s_er.[session_id] = s_tst.[session_id]           CROSS APPLY sys.dm_exec_sql_text (s_ec.[most_recent_sql_handle]) AS s_est           OUTER APPLY sys.dm_exec_query_plan (s_er.[plan_handle]) AS s_eqp        ORDER BY [Begin Time] ASC;   Utile nel caso di transazioni bloccate\bloccanti!&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100808.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2012/02/28/transazioni-attive-su-sql-server.aspx</guid>
            <pubDate>Tue, 28 Feb 2012 13:48:26 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2012/02/28/transazioni-attive-su-sql-server.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100808.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100808.aspx</trackback:ping>
        </item>
    </channel>
</rss>