A DotNet Raider

My adventures in the .NET world!
posts - 49, comments - 12, trackbacks - 0

My Links

News

Website View Martino Bordin's profile on LinkedIn

Archives

Post Categories

martedì 28 febbraio 2012

Automapper : creare Dto da proxy Nhibernate

automapperSe utilizzate AutoMapper per creare Dto da oggetti letti con Nhibernate e lazy-loading attivo, è possibile che otteniate un’eccezione di tipo ObjectDisposedException, in quanto Automapper accede a proprietà “Lazy”, ma la sessione è già stata chiusa e distrutta.

Per risolverlo, basta implementare un Custom Resolver, che tornerà null qualora il tipo della proprietà che sto provando a mappare sia un proxy non inizializzato.

Ecco quindi il codice:

  1. public class NhProxyResolver : ValueResolver<object, object>
  2. {
  3.     protected override object ResolveCore(object source)
  4.     {
  5.         return NHibernateUtil.IsInitialized(source) ? source : null;
  6.     }
  7. }

 

ed un esempio della configurazione di AutoMapper:

  1. Mapper.CreateMap<User, UserDto>()
  2.     .ForMember(x => x.Orders, opt => opt.ResolveUsing<NhProxyResolver>().FromMember(z => z.Orders));

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (0) | Filed Under [ WPF SILVERLIGHT O/RM ]

Transazioni attive su SQL Server

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!

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (1) | Filed Under [ SQL Server ]

Powered by:
Powered By Subtext Powered By ASP.NET