Hello,

Given these 2 entities:

public class Match : BaseEntity
{
private Team homeTeam;
private Team roadTeam;

public Match()
{
 }

public Team HomeTeam
{
get { return homeTeam; }
set
{
if (homeTeam == value)
return;

if (homeTeam != null)
homeTeam.RemoveFromMatch(this, true);

homeTeam = value;

if (value == null)
return;

value.AddToMatch(this, true);
}
}

public Team RoadTeam
{
get { return roadTeam; }
set
{
if (roadTeam == value)
return;

if (roadTeam != null)
roadTeam.RemoveFromMatch(this, false);

roadTeam = value;

if (value == null)
return;

value.AddToMatch(this, false);
}
}
}

public class Team : BaseEntity
{
public Team()
{
}
}

And this mapping configuration:

var mapper = new ConventionModelMapper();

var baseEntityType = typeof(BaseEntity);

mapper.IsEntity((t, declared) => baseEntityType.IsAssignableFrom(t) && 
baseEntityType != t && !t.IsInterface);
mapper.IsRootEntity((t, declared) => baseEntityType.Equals(t.BaseType));

mapper.BeforeMapManyToOne += (insp, prop, map) => 
map.Column(prop.LocalMember.GetPropertyOrFieldType().Name + "Id");
//mapper.BeforeMapManyToOne += (insp, prop, map) => 
map.Cascade(Cascade.Persist);
mapper.BeforeMapManyToOne += (insp, prop, map) => map.NotNullable(true);
//mapper.BeforeMapManyToOne += (insp, prop, map) => 
map.Access(Accessor.Field);

mapper.BeforeMapSet += (insp, prop, map) => map.Key(km => 
km.Column(prop.GetContainerEntity(insp).Name + "Id"));
mapper.BeforeMapSet += (insp, prop, map) => map.Cascade(Cascade.All | 
Cascade.DeleteOrphans);
mapper.BeforeMapSet += (insp, prop, map) => map.Inverse(true);

mapper.BeforeMapProperty += (insp, prop, map) => map.NotNullable(true);

mapper.BeforeMapClass += (i, t, cm) => cm.Id(map =>
{
map.Column(t.Name + "Id");
map.Generator(Generators.Native);
});

NH generates this mapping:

<class name="Match">
<id name="Id" access="nosetter.camelcase" column="MatchId" type="Int32">
<generator class="native" />
</id>
<many-to-one name="HomeTeam" column="TeamId" not-null="true" />
<many-to-one name="RoadTeam" column="TeamId" not-null="true" />
</class>

I expected the mapping to use HomeTeamId and RoadTeamId as column names.

This can be countered with:

mapper.Class<Match>(cm =>
{
cm.ManyToOne(m => m.HomeTeam, pm => pm.Column("HomeTeamId"));
cm.ManyToOne(m => m.RoadTeam, pm => pm.Column("RoadTeamId"));
});

I don't know if this a bug, that's why I ask :)

Thanks in advance

Mike

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en.

Reply via email to