Finally, I made 
*session.Auditer().CrossTypeRevisionChangesReader().FindEntities(3) 
*work!

What I had to do is, instead of extending 
*DefaultTrackingModifiedEntitiesRevisionEntity, 
*I annotated the class and the necessary fields.

And I don't know if it is important but I reviewed Equals()' code and 
copied the GetHashCode content from the 
*DefaultTrackingModifiedEntitiesRevisionEntity 
*implementation.

Like this:

ps: Unfortunately, the Listener isn't being called.

[RevisionEntity(typeof(RevInfoListener))]
    public class CustomRevInfo 
    {
        [RevisionNumber]
        public virtual int Id { get; set; }

        [RevisionTimestamp]
        public virtual DateTime RevisionDate { get; set; }

        public virtual string Usuario { get; set; }
        
        [ModifiedEntityNames]
        public virtual Set<string> ModifiedEntityNames { get; protected 
set; }

        public override bool Equals(object obj)
        {
            if (this == obj)
                return true;

            var casted = obj as CustomRevInfo;
           
            if (casted == null)
                return false;

            if (Id != casted.Id) return false;
            if (RevisionDate != casted.RevisionDate) return false;
            if (Usuario != casted.Usuario) return false;
            if (!ModifiedEntityNames.Equals(casted.ModifiedEntityNames)) 
return false;

            return true;
        }

        public override int GetHashCode()
        {
            var result = Id;
            result = 31 * result + (int)(((ulong)RevisionDate.Ticks) ^ 
(((ulong)RevisionDate.Ticks) >> 32));
            return result;
        }

    }


Oh, btw, the docs says that the attribute's name is *ModifiedEntityTypes *when 
in fact it is *ModifiedEntityNames.*


On Wednesday, February 19, 2014 4:06:40 PM UTC-3, Guilherme Paschoal wrote:
>
> Just to keep the update on my progress coming:
>
> I found out that the "query did not return unique result" exception is 
> thrown by the criteria API's "query.UniqueResult" executed in 
> FindEntityTypes method.
>
> I debugged it and changed it for "query.List()" and it executed the query 
> yet it returned something like this:
>
> [0] {NHibernate.Envers.DefaultTrackingModifiedEntitiesRevisionEntity} object 
> {DefaultTrackingModifiedEntitiesRevisionEntityProxy}
> [1] {NHibernate.Envers.DefaultTrackingModifiedEntitiesRevisionEntity} object 
> {DefaultTrackingModifiedEntitiesRevisionEntityProxy}
> [2] {MyNamespace.DataAccess.Audit.REVINFO} object 
> {MyNamespace.DataAccess.Audit.REVINFO}
>
>
> the two first rows in the result, seem to be related to the fact that 2 
> entities are modified on the revision.
>
> I'll keep looking into it.
>
> On Wednesday, February 19, 2014 6:00:18 AM UTC-3, Roger wrote:
>>
>> Can’t see anything wrong on what you’ve posted. If you don’t have the 
>> time to isolate your problem a bit more, I don’t know I’m afraid. Sorry.
>>
>>  
>>
>> You might want to take a look at Envers’ tests and see what differs to 
>> try to find out why they work but you have problems in your environment.
>>
>>  
>>
>> If you do find the time to isolate your problem and it turns out it’s 
>> really a bug in Envers, please report it to the JIRA.
>>
>>  
>>
>> Good luck!
>>
>> /Roger
>>
>>  
>>
>> *From:* [email protected] [mailto:[email protected]] *On 
>> Behalf Of *Guilherme Paschoal
>> *Sent:* den 18 februari 2014 18:38
>> *To:* [email protected]
>> *Subject:* Re: [nhusers] [Envers] Query from different catalog
>>
>>  
>>
>> Roger, 
>>
>>  
>>
>> Actually, I have to say I'm sorry first, I was only testing 
>> GetCurrentRevision... Other querys "work".
>>
>>  
>>
>>    - *session.Auditer().GetCurrentRevision(false)* returns Id = 0 and 
>>    date = now;
>>    - 
>> *session.Auditer().CrossTypeRevisionChangesReader().FindEntities(3,RevisionType.Modified)
>>  
>>    *returns "query did not return a unique result: 3". Actually there 
>>    are 2 records for revision 3 in RevChanges table. How should I execute 
>> this 
>>    query? I'm doing it like it is said in the docs.
>>    - *session.Auditer().GetRevisionNumberForDate(new DateTime(2014, 02, 
>>    17,15,55,03,503,DateTimeKind.Local)) *returns "query did not return a 
>>    unique result: 2". There's only one record in Revinfo for this exact 
>>    datetime.
>>    - *session.Auditer().GetRevisions(typeof (ItemDeConfiguracao), 1) 
>> *returns 
>>    6 records (it looks like its something with it's query's inner/left join):
>>
>>
>>    - Name - Value
>>       - [0] - 1
>>       - [1] - 3 
>>       - [2] - 4
>>       - [3] - 1
>>       - [4] - 3
>>       - [5] - 4
>>    
>> This is my nhibernate session factory:
>>
>>  
>>
>>  public static ISessionFactory SessionFactory
>>
>>         {
>>
>>             get
>>
>>             {
>>
>>                 try
>>
>>                 {
>>
>>                     if (_sessionFactory == null)
>>
>>                     {
>>
>>                         lock (SyncRoot)
>>
>>                         {
>>
>>                             
>>
>>                            _sessionFactory = Fluently.Configure()
>>
>>                                 
>>  .Database(MsSqlConfiguration.MsSql2008.Dialect<CustomMsSql2008Dialect>()
>>
>>                                  //.ConnectionString(c => 
>> c.FromConnectionStringWithKey("DBSQL_AUDIT")).ShowSql())
>>
>>                                  .ConnectionString(c => 
>> c.FromConnectionStringWithKey("DBSQL")).ShowSql())
>>
>>                                  .Mappings(m => 
>> m.FluentMappings.AddFromAssemblyOf<NHibernateHelper>())
>>
>>                                  .ExposeConfiguration(ConfigurarEnvers)
>>
>>                                  //.ExposeConfiguration(c => new 
>> SchemaExport(c).SetOutputFile(@"C:\Temp\scripteste.txt").Execute(true, 
>> true, false))
>>
>>                                  .BuildSessionFactory();
>>
>>                           
>>
>>                             
>>
>>                         }
>>
>>                     }
>>
>>                     return _sessionFactory;
>>
>>                 }
>>
>>                 catch (FluentConfigurationException ex)
>>
>>                 {
>>
>>                    // Log.Fatal(ex);
>>
>>                     throw new Exception("Não foi possível conectar-se ao 
>> banco de dados. Favor entrar em contato com o administrador do sistema.", 
>> ex);
>>
>>                 }
>>
>>             }
>>
>>         }
>>
>> private static void ConfigurarEnvers(Configuration cfg)
>>
>>         {
>>
>>             var enversConf = new 
>> NHibernate.Envers.Configuration.Fluent.FluentConfiguration();
>>
>>             var rev = new RevInfoListener();
>>
>>  
>>
>>             
>> enversConf.Audit(Dominio.Classes.Helper.ObterSubClassesDeEntidadeBase());
>>
>>                         
>> cfg.SetEnversProperty(ConfigurationKey.TrackEntitiesChangedInRevision, 
>> true);
>>
>>             cfg.SetEnversProperty(ConfigurationKey.DefaultSchema, "dbo");
>>
>>             cfg.SetEnversProperty(ConfigurationKey.DefaultCatalog, 
>> "DB_AUDIT");
>>
>>             cfg.IntegrateWithEnvers(enversConf);
>>
>>            
>>
>>         }
>>
>>
>> And this is my Custom REVINFO class
>>
>>  
>>
>>   [RevisionEntity(typeof(RevInfoListener))]
>>
>>     public class REVINFO : DefaultTrackingModifiedEntitiesRevisionEntity 
>>
>>     {
>>
>>         public virtual string Usuario { get; set; }
>>
>>     }
>>
>>  
>>
>> RevInfoListener
>>
>> public class RevInfoListener : IRevisionListener
>>
>>     {
>>
>>         public void NewRevision(object revisionEntity)
>>
>>         {
>>
>>             var usuario = Thread.CurrentPrincipal.Identity.Name;
>>
>>  
>>
>>             ((REVINFO)revisionEntity).Usuario = usuario;
>>
>>         }
>>
>>     }
>>
>>  
>>
>> And REVINFOMap. The value returned by 
>> configurationmanager.appsettings["BandoDeDadosAuditoria"] is 
>> "DB_AUDIT.dbo". It's the catalog and schema name. It's the way I found to 
>> force it uses the Audit database for querying, otherwise it will try to 
>> query from the Session's catalog.
>>
>>  
>>
>>  public class REVINFOMap : ClassMap<REVINFO>
>>
>>     {
>>
>>         public REVINFOMap()
>>
>>         {
>>
>>             
>>
>>             var bdAudit = 
>> ConfigurationManager.AppSettings["BancoDeDadosAuditoria"];
>>
>>             Schema(bdAudit);
>>
>>             Table("REVINFO");
>>
>>             
>>
>>             Id(x => x.Id, "REV").GeneratedBy.Identity();
>>
>>             Map(x => x.RevisionDate, "REVTSTMP");
>>
>>             Map(x => x.Usuario, "Usuario");
>>
>>         }
>>
>>     }
>>
>>
>> Btw, The "Usuario" field is being inserted as NULL... It worked before I 
>> activated the TrackEntitiesChangedInRevision setting.
>>
>>  
>>
>>  
>>
>> And please don't ask me to post an Isolated Test or whatever... Our code 
>> is a total mess right now and for some freaking reason, an error is 
>> occurring when I try to open a session in test environment. We're on a 
>> total rush here. The company's president is on our asses these days. Yep, 
>> the president.
>>
>> thanks a lot in advance!
>>
>>  
>>
>>
>> On Tuesday, February 18, 2014 7:28:59 AM UTC-3, Roger wrote:
>>
>> AFAIK, that ”should” work. Is it one specific query that doesn’t work or 
>> is it all of them?
>>
>>  
>>
>> How is your configuration object configured?
>>
>>  
>>
>> *From:* [email protected] [mailto:[email protected]] *On 
>> Behalf Of *Guilherme Paschoal
>> *Sent:* den 17 februari 2014 21:17
>> *To:* [email protected]
>> *Subject:* [nhusers] [Envers] Query from different catalog
>>
>>  
>>
>> Hello guys!
>>
>>  
>>
>> I successfully got envers to work, saving to a different catalog. 
>>
>>  
>>
>> My problem is that unfortunately, querying from that catalog, won't work. 
>> It queries from the current session's catalog, not from the one I 
>> configured in "cfg.SetEnversProperty(ConfigurationKey.DefaultCatalog, 
>> "DB_AUDIT");".
>>
>>  
>>
>>  I've been searching around envers source but I couldn't find any tips on 
>> that.
>>
>>  
>>
>> Anyone got that one working or has any tips for me?
>>
>>  
>>
>> Thanks a lot in advance!
>>
>>  
>>
>>  
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "nhusers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/nhusers.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "nhusers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/nhusers.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to