I want to make sure that the database table name for entity Employee
is Employees, but the table name for entity Category should be
Categories, not Categorys.
The short-cut method shown below doesn't work, but the custom code
technique is a big mystery at the moment, so I just need a hint or
two.
Currently, the one-size-fits-all approach is this:
returnValue = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c =>
c.FromConnectionStringWithKey("ConnectionString") )
.ShowSql()
.DefaultSchema("dbo")
.ProxyFactoryFactory
("NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle")
)
// Automap the POCO's from class Note plus anything
else that satisfies all these conditions:
// 1. has the correct namespace
specification
// 2. is a concrete class.
.Mappings(m => m.AutoMappings
.Add
(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Note>()
.Where(entity =>
entity.Namespace.EndsWith
("Notes")
&& entity.IsAbstract ==
false
) // Where
// special conventions can be added here as
well:
.ConventionDiscovery
.Setup ( s =>
{
// start with some built-in short-cut
type conventions:
// database tables names are the
plural of their corresponding entity name
s.Add(Table.Is(t => t.EntityType.Name
+ "s"));
// The primary key attribute of each
entity is called Id
s.Add(PrimaryKey.Name.Is(p => "Id"));
// always default to lazy loading
s.Add(DefaultLazy.AlwaysTrue());
// throw in some custom conventions
that require that we write some code
s.Add<DefaultStringLengthConvention>
();
s.Add<PassphraseLengthConvention>();
}
) // Setup
//
ConventionDiscovery
) // Add
) // Mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory()
;
Ultimately, I'd like to do this instead:
returnValue = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c =>
c.FromConnectionStringWithKey("ConnectionString") )
.ShowSql()
.DefaultSchema("dbo")
.ProxyFactoryFactory
("NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle")
)
// Automap the POCO's from class Note plus anything
else that satisfies all these conditions:
// 1. has the correct namespace
specification
// 2. is a concrete class.
.Mappings(m => m.AutoMappings
.Add
(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Note>()
.Where(entity =>
entity.Namespace.EndsWith
("Notes")
&& entity.IsAbstract ==
false
) // Where
// special conventions can be added here as
well:
.ConventionDiscovery
.Setup ( s =>
{
// start with some built-in short-cut
type conventions:
// database tables names are the
plural of their corresponding entity name
//s.Add(Table.Is(t =>
t.EntityType.Name + "s"));
// The primary key attribute of each
entity is called Id
s.Add(PrimaryKey.Name.Is(p => "Id"));
// always default to lazy loading
s.Add(DefaultLazy.AlwaysTrue());
// throw in some custom conventions
that require that we write some code
s.Add<DefaultStringLengthConvention>
();
s.Add<PassphraseLengthConvention>();
s.Add<TableNameConvention>();
}
) // Setup
//
ConventionDiscovery
) // Add
) // Mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory()
;
where I'm "stuck" is how to write TableNameConvention, which currently
looks like this in its non-working state:
using FluentNHibernate.Conventions;
using FluentNHibernate.Mapping;
using System.Diagnostics;
namespace Mapper
{
/// <summary>
/// Override the Entity-to-Table Name mapping so that when we
"pluralize" entities
/// like Category we get a table named Categories, not Categorys.
/// </summary>
public class TableNameConvention : IClassConvention
{
#region IConvention<IClassMap> Members
public bool Accept(IClassMap target)
{
// is it an entity in our entity namespace?
return target.EntityType.Namespace.EndsWith("Notes");
}
public void Apply(IClassMap target)
{
//FAILS: target.SetAttribute("TableName",
target.EntityType.Name + "s");
Debug.WriteLine(target.TableName);
}
#endregion
}
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---