У меня есть следующее IIdConvention для автоматического сопоставления FluentNHibernate.Я хочу, чтобы все мои свойства идентификатора использовали пользовательский тип, представленный строковым свойством, но CustomType никогда не применяется к моим сопоставлениям.
public class PrimaryKeyHasTableName : FluentNHibernate.Conventions.IIdConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance)
{
instance.Column(instance.EntityType.Name + "Id");
instance.CustomType<CustomIdType>();
}
}
Когда я смотрю на источник FluentNHibernate, кажется, что свойство Type для свойства id уже установлено, поэтому оно не устанавливается моим соглашением.
Если я использую ClassMapдля сопоставления класса вручную у меня нет проблем с настройкой CustomType для свойства Identity.
Id(x => x.Id)
.Column("UserId")
.CustomType<OnFileIdType>();
Кто-нибудь знает, как я могу успешно установить свойство настраиваемого идентификатора, используя соглашение?
Или заставьте мое соглашение запускаться раньше в процессе отображения, чтобы тип не был уже установлен к моменту запуска моего кода.
Кроме того, вот мой код конфигурации:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connString))
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<BaseEntity>();
m.AutoMappings.Add(AutoMap.AssemblyOf<BaseEntity>()
.Where(t => t.Namespace.EndsWith("Models.Domain"))
.Conventions.AddFromAssemblyOf<BaseEntity>()
.UseOverridesFromAssemblyOf<BaseEntity>()
);
})
.ExposeConfiguration(CreateSchema)
.BuildSessionFactory();
Спасибо.