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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---