1) A PersistentClass holds a couple of Property iterators. I would first try 
“SubclassPropertyClosureIterator” (but I’m not really sure!).

Each Property instance holds a collection of Column objects called 
“ColumnIterator”.

To get the type of a column you just call: column.GetSqlTypeCode(mapping).

You get that “mapping” argument by calling BuildMapping() on a Configuration 
instance which you should do before accessing ClassMappings for the first time.

Here is a pseudo code example:

var mapping = nhConfiguration.BuildMapping()

foreach(var pc in nhConfiguration.ClassMappings)

{

foreach(var property in pc.SubclassPropertyClosureIterator)

{

  foreach(var col in property.ColumnIterator)

    var dbType = col.GetSqlTypeCode(mapping).DbType

}

}

 

2) As far as I can tell, the only true black box identifier is TableGenerator.

If I’m not completely mistaken the rest should be accessible through 
PersistenceClass.IdentifierProperty.ColumnIterator

 

Amro

 

Von: nhibernate-development@googlegroups.com 
[mailto:nhibernate-development@googlegroups.com] Im Auftrag von Jeffrey Becker
Gesendet: Dienstag, 10. März 2015 19:40
An: nhibernate-development@googlegroups.com
Betreff: Re: [nhibernate-development] Re: Migrations Status & Feedback request

 

Amaro, I started going down the path you suggested and I'm running into some 
pretty big road blocks. 

 

1) Resolving the type of a column requires access to the mapping which is 
private to Configuration

2) PersistentIdentifiers are black-boxes which keep their params private and 
spit out some sql.

 

These are both pretty big blockers which my code addresses through the 
operations framework.  I'm definitely much more interested in using 
FluentMigrator to do the actual migrations but at this point NHibernate doesn't 
expose the information FluentMigrator needs.

On Monday, February 16, 2015 at 9:15:49 AM UTC-5, Amro El-Fakharany wrote:

Take a look at the implementation of IterateGenerators in the Configuration 
class (the last method in Configuration.cs).

It shows how to get hold of identifier generators.

 

As for auxiliary objects the easiest way I can ad hoc think of would be to 
subscribe to one of the Events BeforeBindMapping or AfterBindMapping of 
Configuration.

Both events gets HbmMapping as a property of the argument BindMappingEventArgs.

In the event handler you just iterate over HbmMapping.DatabaseObjects.

I won’t overestimate the importance of auxiliary objects though.

 

 

Von: nhibernate-...@googlegroups.com <javascript:>  
[mailto:nhibernate-development@googlegroups.com <javascript:> ] Im Auftrag von 
Jeffrey Becker
Gesendet: Montag, 16. Februar 2015 14:26
An: nhibernate-...@googlegroups.com <javascript:> 
Betreff: Re: [nhibernate-development] Re: Migrations Status & Feedback request

 

I did look into using the PersistentClass property but that doesn't seem to 
include information about identifier generators or auxiliary db objects. My 
first thought with this was to simply spider configuration and spit out a 
fluent migrator based class.  I went down the whole operations framework path 
after concluding that all the mapping information I needed just wasn't 
available.  

On Saturday, February 14, 2015 at 9:54:00 AM UTC-5, Amro El-Fakharany wrote:

There is no need to read XML files or interpret mapping-by-code stuff.
All of the required mapping information ends up in PersistentClass which is 
exposed in Configuration through the Enumerable Property ClassMappings if I 
remember correctly.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to  <javascript:> nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit  <https://groups.google.com/d/optout> 
https://groups.google.com/d/optout.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com 
<mailto:nhibernate-development+unsubscr...@googlegroups.com> .
For more options, visit https://groups.google.com/d/optout.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to