I have same problem: sharparch + Parent - child relationship with my
object tree that derives from Entity -> joined-class tables are not
pluralized.
As I read in this and "IJoinedSubClassConvention never called" post, I
added the convention implementation as:
-----------------------------------------------------------------------------------------------
public class JoinedSubClassConvention : IJoinedSubclassConvention
{
public bool Accept(IJoinedSubclass target) { return true; }
public void Apply(IJoinedSubclass target)
{
target.WithTableName(Inflector.Net.Inflector.Pluralize
(target.EntityType.Name));
}
}
-----------------------------------------------------------------------------------------------
Then I updated my project with the latest build of FluentNhibernate
from the trunk. I noticed that AutoJoinedSubClassPart class is
still is corrected:
-----------------------------------------------------------------------------------------------
public class AutoJoinedSubClassPart<T> : AutoMap<T>,
IJoinedSubclass
void IJoinedSubclass.WithTableName(string tableName)
{
throw new NotImplementedException();
}
-----------------------------------------------------------------------------------------------
so I changed this into:
-----------------------------------------------------------------------------------------------
void IJoinedSubclass.WithTableName(string tableName)
{
WithTable(tableName);
}
-----------------------------------------------------------------------------------------------
recompiled against NH 2.1 and added binaries to my project. I added
the new convention and my auto generator looks like:
-----------------------------------------------------------------------------------------------
public class AutoPersistenceModelGenerator :
IAutoPersistenceModelGenerator
{
public AutoPersistenceModel Generate()
{
AutoPersistenceModel mappings = AutoPersistenceModel
// If you delete the default class, simply point the
following line to an entity within the .Core layer
.MapEntitiesFromAssemblyOf<PowerPlant>()
.Where(GetAutoMappingFilter)
.ConventionDiscovery.Setup(GetConventions())
.WithSetup(GetSetup())
.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>
();
return mappings;
}
private Action<AutoMappingExpressions> GetSetup()
{
return c =>
{
c.FindIdentity = type => type.Name == "Id";
c.IsBaseType = IsBaseTypeConvention;
};
}
private Action<IConventionFinder> GetConventions()
{
return c =>
{
c.Add<PrimaryKeyConvention>();
c.Add<ReferenceConvention>();
c.Add<HasManyConvention>();
c.Add<TableNameConvention>();
c.Add<JoinedSubClassConvention>();
};
}
/// <summary>
/// Provides a filter for only including types which inherit
from the IEntityWithTypedId interface.
/// </summary>
private bool GetAutoMappingFilter(Type t)
{
return t.GetInterfaces().Any(x =>
x.IsGenericType && x.GetGenericTypeDefinition() ==
typeof(IEntityWithTypedId<>));
}
private bool IsBaseTypeConvention(Type arg)
{
bool derivesFromEntity = arg == typeof(Entity);
bool derivesFromEntityWithTypedId = arg.IsGenericType &&
(arg.GetGenericTypeDefinition() == typeof
(EntityWithTypedId<>));
return derivesFromEntity || derivesFromEntityWithTypedId;
}
}
-----------------------------------------------------------------------------------------------
This however doesn't generate pluralized table names for my joined-
subclass entities, however either accept and apply are being hit for
the correct class!
I generate the schema like:
-----------------------------------------------------------------------------------------------
var config = NHibernateSession.Init(
new SimpleSessionStorage(),
mappingAssemblies,
new AutoPersistenceModelGenerator().Generate(),
@"IntegrationTestsConfiguration
\NHibernate_SqlServer2005.config");
// Generates tables from schema
new NHibernate.Tool.hbm2ddl.SchemaExport(config).Create
(true, true);
-----------------------------------------------------------------------------------------------
I know it's a lot of code that I vomit here (extremely sorry) but I
wasted half a day on searching for the solution and I'm still stuck on
this. Could anybody point me where am I wrong ?
many thanks,
Łukasz Podolak
On 27 Maj, 12:10, Rui Silvestre <[email protected]> wrote:
> Hi Martin,
>
> you have a point there, I have limited knowledge of FNH... work in
> progress...
> yes, I had the class convention and was thinking it would work,,, It
> didn't so I searched some more and found a thread
> ("IJoinedSubClassConvention never called") which explained nicely what
> to do. I downloaded the code from svn and found out that your patch
> was not applied so I did it, recompiled FNH, recompiled Sharp with the
> library and my project worked.
>
> this is a sensible point as I saw a lot of threads on the internet
> about this issue.
>
> thank you all for the help.
>
> On 27 Maio, 09:25, "Martin Hornagold"
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---