Added IncludeHasMany Option:  Because sometimes we have a Normalized database that requires no-Inverse properties, or we just dont want Inverse IList Properties/Fields, this also performs errors in Domain and Maps Generation in cases when we have a Table that has 2 or more foreing key in another table (properties are named as the table that has the reference and two instances gonna be name equally throwing and error of "already existing member with that name")  This change is in App.Designer.cs, App.cs, ApplicationPreferences.cs, ApplicationSettings.cs, and used in: CodeGenerator.cs, ContractGenerator.cs and FluentGenerator.cs

Paralelism Generation: The MaxDegreeOfParallelism was not configured, this may turns in error when someone have problems with databases that could'n manage lots of concurrently connections querying database schema data. (Was my case), if we limit to something more real like "The quantity of current Logical processors" using Environment.ProcessorCount resolves the case.  This change is in App.cs

Use Lazy options just manages the properties references, but does not manage the "LazyLoad();" call in Map's Classes (Table mappings Definitions) at least in FluentGenerator.cs

Using statement missing: The Namespace of the Domain must be included in "using" header's sections in order to work the reference to Defined Domain Mapped(this wasn't currently managed, solved). This change is in FluentGenerator.cs

No PrimaryKey Cases: In one of my databases i've received lots of errors related to Primary Key, cases when the definition is null this was happened at least in tables that has no Primary Key, I added a check if PrimaryKey is Null to ignore the addition or PrimaryKey inexisting mappings. This change is in FluentGenerator.cs

Inflector Disabled by Default: This has to be disableable, Meanwhile Inflectors definitions will be commented. (TODO: include a CheckBox to Disable this by default and a warning text with the location of the Inflectors Definitions "Inflector.cs" to allow the user with non English Database to go and edit the current definitions) This change is in Inflector.cs

Existing PascalCase Tables: This existing pascalcase tables are converted to only-first-char-uppercase style because dont have space or underscore convention (exist many cases with PascalCase TableName, it consider the PascalCase as the "RestOfWord" when really isn't)  This change is in Inflector.cs

Ilegal Chars in Class or Property name's: In cases when a table or column has a wild name like "Nº Cases", "Inc. Main" or "% Complete", etc the resulting in "NºCases", "Inc.Main" or "%Complete" Class or Property Name's. This change is in TextFormatter.cs
Fixes: https://nmg.codeplex.com/workitem/7852
Request: Make "s"-suffix optional
https://nmg.codeplex.com/workitem/7848
Mistake
Cleaner Fluent Mapping CompositeId().
Cleaner code
This:
        public override bool Equals(object obj) {
            ...
            if (field1 == t.field1
             && field2 == t.field2
             && fieldn == t.fieldn)
            ...
        }
instead of:
        public override bool Equals(object obj) {
            ...
            if (field1 == t.field1 && field2 == t.field2 && fieldn == t.fieldn)
            ...
        }
New Feature: Allow to generate Foreign Keys properties with the actual name of the column instead of the Foreign Referenced by the ForeignKey Table Name.
CheckBox says: (under "Include Foreign Keys" CheckBox reads as "Name as Foreign Table"), since it depends of it.

Example:
...
public virtual Materials PrincipalMaterial { get; set; }
public virtual Materials SecundaryMaterial { get; set; }
...
instead of
...
public virtual Materials Materials { get; set; }
public virtual Materials Materials { get; set; }
...
In cases when the property is created by a Column named like "cod_PrincipalMaterial", exist the posibility to add the "cod_" prefix for removal in generation process.
Improvement: use cleaner Nullable Types

int?
instead of
System.Nullable<int>

Improvement: remove extra parenthesis from Attributes with no parameters

[NotNullNotEmpty]
instead of
[NotNullNotEmpty()]
To be More cleaner.
I started to think seriously about this application should be rewritten.
It is difficult to make corrections because all things are descentralized and repeated in many places.
I'm just make it work with Fluent Mapping because I know it and I use it, hope someone try to make the changes for the other mappings too.

Fix: There is a problem when a Table has a column with the same name as the table. This generates a Class with a property named as the same class, and this is not allowed. I managed the problem adding a suffix to the property, far now is static "Var" but is easily replaceable with a app config value, I will try to do it later.
bug fix.
BugFix, Bad generation when column have more than one ForeignKey restriction to the same Foreign Table (this is not common but I had a probably bad mantained database with that)
I needed to undone the NameFkAsForeignTable in some places, i dont know if still works well or not. be careful.
Files can't be named as "con" in windows.
Escape apostrofe/single quote table names in sql server.
Actualizado a Versión online
Added some helpful info to the Preferences Tab.
Added code to remove unnecesary double new line from generated Fluent Mapping and Domain Code.
NMG.Core\Generator\AbstractCodeGenerator.cs
NMG.Core\Generator\CodeGenerator.cs
Improved code that removes repeated FK property names.
NMG.Core\Generator\CodeGenerator.cs
Fix bug when "NameFkAsForeignTable" app preference present.
NMG.Core\Generator\CodeGenerator.cs
TODO: add to app preference a feature/checkbox to enable/disable include Views as Tables.
Fix/Improvment: when converting tables were already PascalCased to PascalCase, not preserve uppercased. Just the "space cased" "underscore_cased" result on PascalCased.
Hope you liked
Fix: When creating the domain Primary Key's that are also Foreing Key (at the same time in the same column) are added as value properties and then again as references in the Domain.
This behaviour occurs when "Name as Foreing Key" is disabled.
(Previously an "Id" was try to added but this is not recommeded because redundant field could lead to confusion and also requires to rename the mapping field too.)
Let's see the following example:

public partial class CustomerAdditionalData {
    public string codIDCustomer { get; set; }   //Duplicate, not necessary.
    public Customer codIDCustomer { get; set; }
    public Customer codIDRecommendedCustomer { get; set; }

"Name as Foreing Key" Exist because a field can have two Foreing Keys to two different tables, this Results in (instead of the above example):

public partial class CustomerAdditionalData {
    public string codIDCustomer { get; set;
    public Customer Customer { get; set; }
    public Customer Customer { get; set; } //Duplicate, because actually both column name are different, but now is named as the Foreing Table.

I hope you find it useful!
I forget remove the + "Id" from:
NMG.Core\Generator\CodeGenerator.cs
NMG.Core\Generator\FluentGenerator.cs
Now when Composite ID (a Primary Key made from more than one column) that also references (have a foreign key) another table, we add all columns in the same "References()" call.

References(x => x.AcaartCodGen).Columns("acaart_CodGen, acaart_CodEle1, acaart_CodEle2, acaart_CodEle3");

Bing for "reference composite fluentnhibernate"
or read
http://devlicio.us/blogs/derik_whittaker/archive/2009/01/30/mapping-a-one-to-many-relationship-with-fluent-nhibernate-w-composite-id-s.aspx

as it says: "The use of WithColumns() on the References (many-to-one) mapping when trying to map back to the parent.  This will tell NHibernate to use the composite-id as the mapping key."

This is buggy yet, but so far it works.
To be more seamless
This:
Id(x => x.SsnID).Column("SsnID").GeneratedBy.Assigned();
instead of:
Id(x => x.SsnID).GeneratedBy.Assigned().Column("SsnID");
seamless with:
Map(x => x.Name).Column("name").Not.Nullable().Length(25);
(second fluent call is Column now.)