Hi All,

I'm having a weird problem that hopefully someone might have some
thoughts about.

I am trying to auto map and assign more specific constraints to a type
(see User in code below). This is mostly just basic code I've gotten
from blogs. When I run my test, the hbm export file is created and has
the correct attributes. However, the the SchemaExport output to the
console is missing the unique constraint and non-null specification.

The strange part is that is if I use the hbm mappings in the
BuildSessionFactory method (currently commented out) the constraints
are added to the schema. It's when I try to use the auto mapping that
I run into trouble. I also had this working previously (using the non-
fluent configuration, see below) but that code also stopped working
with the same problem when I updated to a recent FNH version.

Is this something that I was doing wrong before and just happened to
work? Or is this a regression?

Thanks!
s.


-------

// Create SessionFactory
UnitOfWork.SessionFactory = new NHibernateHelper().BuildSessionFactory
(config, BuildSchema);

// Export Schema
public void BuildSchema(Configuration cfg)
{
    new SchemaExport(cfg).Create(true, true);
}

// Build Session Factory
public ISessionFactory BuildSessionFactory(Configuration config,
                                           Action<Configuration>
configAction)
{
    var f = FluentNHibernate.Cfg.Fluently
        .Configure(config)
        .Mappings(m =>
        {
            //m.HbmMappings
            // .AddFromAssemblyOf<NHibernateHelper>();

            m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<IEntity>
()
                    .Where(entity => entity.Namespace.Contains
("Domain") &&
                                     entity.GetProperty("Id") != null
&&
                                     entity.IsAbstract == false)
                    .WithConvention(convention =>
                    {
                        convention.IsBaseType = (type => (type ==
typeof(Entity<int>) ||
                                                         (type ==
typeof(Entity<Guid>))));
                    })
                    .ForTypesThatDeriveFrom<User>(map =>
                    {
                        map.Map(p => p.Username).Unique().Not.Nullable
();
                    })
            ).ExportTo(@"c:\src\project\log\");
        })
        .ExposeConfiguration(configAction)
        .BuildSessionFactory();

    return f;
}

<!-- hbm Export File -->
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
lazy="true" assembly="Project.Core" namespace="Project.Core.Domain">
  <class name="User" table="Users" xmlns="urn:nhibernate-mapping-2.2">
  <id name="Id" column="Id" type="Guid">
    <generator class="guid.comb" />
  </id>
    <property name="Username" unique="true" not-null="true"
length="100" type="String">
      <column name="Username" />
    </property>
  </class>
</hibernate-mapping>

-- SQLite schema export:
create table Users (
  Id UNIQUEIDENTIFIER not null,
   Username TEXT,
   primary key (Id)
)

// Previously working code
public PersistenceModel BuildModel()
{
    var model = new AutoPersistenceModel();

    foreach (Assembly assembly in this.fluentAssemblies)
    {
        // Add assembly for the fluent mapping files
        model.addMappingsFromAssembly(assembly);

        // Add assembly and configuration for fluent AutoMapped
classes
        model.AddEntityAssembly(assembly);
    }

    model.Where(entity => entity.Namespace.Contains("Domain") &&
                          entity.GetProperty("Id") != null &&
                          entity.IsAbstract == false)
         .WithConvention(c =>
          {
              c.IsBaseType = (type => (type == typeof(Entity<int>) ||
                                      (type == typeof
(Entity<Guid>))));
         });

    // TODO: Move these out to a proper location!!!
    model.ForTypesThatDeriveFrom<User>(map =>
    {
        map.Map(p => p.Username).WithUniqueConstraint()
                               .CanNotBeNull();
    });

    return model;
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to