Yes, i call CreateRevisionInfoMappingDocument more than once per 
configuration object, because i have one configuration object per 
application which working with several database. And each call 
CreateRevisionInfoMappingDocument creates an audit for each audit database.


понедельник, 23 сентября 2013 г., 14:34:57 UTC+4 пользователь Roger написал:
>
> I'm not sure I follow you but...
>
>  
>
> Do you have a single (Nhibernate) Configuration instance for you 
> application or one per database? The exception you get, occurs when you try 
> to decorate multiple mapped entities as "RevisionEntity" in the 
> Configuration object.
>
>  
>
> Maybe you call CreateRevisionInfoMappingDocument more than once per 
> configuration object?
>
>  
>
>  
>
>  
>
>  
>
> *From:* [email protected] <javascript:> [mailto:
> [email protected] <javascript:>] *On Behalf Of *????? ????????
> *Sent:* den 20 september 2013 16:54
> *To:* [email protected] <javascript:>
> *Subject:* [nhusers] Re: several databases
>
>  
>
> It's not so easy to send you reductive configuration example.
>
> Let me try to explain more detailed how our system is organized.
>
>  
>
> There are domain models from different application areas (for example, 
> main domain model and settings domain model, authorization).
>
> Technically they are different builds and different data bases.
>
> We have an opportunity to work with both essences in one transaction in 
> business logic description.
>
> For example, in neighboring code strings you can see
>
>  
>
> {
>
>   var project = _dalFactory.GetFor<Project>().First(z=>z.Name == "name1");
>
>   var settings = _dalFactory.GetFor<Settings>().First(z=>z.Code == "code1")
>
> }
>
>  
>
> Where project persists to data base 1 and settings persists to data base 
> 2. It's encoded by the following way (pseudocode):
>
>  
>
> {
>
>    var cfg = new Configuration();
>
>    var assemblies = GetAllApplicationAssemblies();
>
>    assemblies.Foreach(z=>cfg.AddAssembly(z));
>
>    And it's clear that in nhibernate mappings we mentioned data base where 
> the object persists.
>
> }
>
>  
>
> Then we need to receive the full audit of domain model No.1.
>
> We filled required attributes to code. For example:
>
>  
>
> configuration.SetEnversProperty(ConfigurationKey.AuditStrategy, 
> typeof(DefaultAuditStrategy));
>
> configuration.SetEnversProperty(ConfigurationKey.TrackEntitiesChangedInRevision,
>  
> false);
>
>  
>
> and invoke configuration.IntegrateWithEnvers(new AuditEventListener(), new 
> AuditMetadataProvider(...));
>
>  
>
> As it's very important for us to release our domain model from point which 
> orm now works, we do not set audit attributes to domain model, but encoded 
> AuditMetadataProvider that it return IDictionary<System.Type, IEntityMeta> 
> based on types provided to AuditMetadataProvider
>
>  
>
> (now we have total audit and we provide all domain types here)
>
> Also we create mapping for auditRevisoinEntity by the following way
>
>  
>
>     private HbmMapping CreateRevisionInfoMappingDocument()
>
>         {
>
>             var mapper = new ModelMapper();
>
>  
>
>             mapper.Class<AuditRevisionEntity>(mapping=>
>
>             {
>
>                 mapping.Id(z=>z.Id, 
> idMapper=>idMapper.Generator(Generators.Native, z=>z.Params(new 
> KeyValuePair<string,string>("sequence", "generateidsequence"))));
>
>  
>
>                 mapping.Property(z => z.RevisionDate, z => { 
> z.Insert(true); z.Update(false); });
>
>                 mapping.Property(z => z.Author, z=> { z.Insert(true); 
> z.Update(false); });                      
>
>                 mapping.Table(typeof(AuditRevisionEntity).Name);
>
>                 mapping.Schema(_auditSchema);
>
>             });
>
>  
>
>             var result = 
> mapper.CompileMappingForAllExplicitlyAddedEntities();
>
>  
>
>             return result;
>
>         }
>
>  
>
> Everything works perfect! But now we have business requirement to hold 
> audit for all domain models. So we want to hold audit for settings and 
> authorization. 
>
> Let me remind you, that they are in different data bases.
>
>  
>
> The first I'd done, was to invoke again configuration.IntegrateWithEnvers 
> but with other instance of auditMetadataProvider, which aimed to its types. 
> Nothing happened, because audit configuration invokes once for each 
> instance configuration.
>
> The second I'd done was to create class CompositeAuditMetadataProvider : 
> IMetaDataProvider which returns aggregated dictionary of dictionaries of 
> all aggregated provided IMetaDataProvider (classical pattern composite 
> realization). I received error "Only one entity may be decorated with 
> [RevisionEntity]! "
>
>  
>
> I hope I was successful in explanation and description of our situation. I 
> think if it try to make an example with configuration it will be not very 
> simple J
>
> It seems to me the description above will let you understand how our 
> system is organized
>
>  
>
> Of course, it's possible to keep all audit information in one data base 
> (it will be a "plug" to exit the situation, but it will be not very good to 
> keep audit information from different data bases in one)
>
>  
>
> Thank you for your attention, I'll be glad to receive any answer from you.
>
> As usual, we have burning deadlines J and we need to present anything for 
> our business customers next week.
>
>
> четверг, 19 сентября 2013 г., 16:30:51 UTC+4 пользователь Денис Подзюбан 
> написал:
>
> Good day!
>
> I use envers version 1.6.
> Our application works with data from different data bases.
> In present time we used audit for one of them.
> Now we need to use audit for all data bases.
> When we try to to make settings for audit in several data bases we have an 
> exeption "Only one entity may be decorated with [RevisionEntity]! "
> Could you please tell us what we should do in this situation?
>
> Thank you 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] <javascript:>.
> To post to this group, send email to [email protected] <javascript:>
> .
> 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