Этот вопрос уже задан , но достойного ответа не было.
Существует ли имя свойства для свободного владения nhibernate, так что вместо поиска Id
он ищет ProductId
?
PrimaryKeyConvention
применяется к именам столбцов в базе данных, а НЕ к именам свойств.
Рассмотрим этот сценарий:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
}
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
bool shouldMap = type.In(typeof(Product));
return shouldMap;
}
}
public void TestFluentNHibernate()
{
var configuration = Fluently.Configure().
Database(MsSqlConfiguration.MsSql2008.ConnectionString("database=asd;server=.\\sqlexpress;trusted_connection=true;"))
.Mappings(m =>
{
IAutomappingConfiguration cfg = new AutomappingConfiguration();
m.AutoMappings.Add(AutoMap.AssemblyOf<Product>(cfg).Conventions.AddFromAssemblyOf<PrimaryKeyConvention>());
});
var factory = configuration.BuildSessionFactory();
}
Результат:
FluentNHibernate.Visitors.ValidationException: у сущности «Продукт» нет сопоставленного идентификатора. Используйте метод Id для сопоставления вашего свойства идентичности. Например: Id (x => x.Id).
Какое соглашение я могу добавить / переопределить, чтобы сказать беглому nhibernate искать «EntityName» + «Id» в именах свойств? Я просмотрел эту страницу соглашения, но не нашел перезаписывающей.