Свободный nhibernate PrimaryKeyConvention для имен свойств - PullRequest
0 голосов
/ 15 декабря 2011

Этот вопрос уже задан , но достойного ответа не было.

Существует ли имя свойства для свободного владения 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» в именах свойств? Я просмотрел эту страницу соглашения, но не нашел перезаписывающей.

1 Ответ

1 голос
/ 15 декабря 2011
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
    public override bool IsId(Member member)
    {
        return member.Name == member.DeclaringType.Name + "Id";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...