Сопоставление в файле конфигурации при использовании сопоставления Nhibernate по коду

Я хочу использовать сопоставление по коду, поэтому у меня есть класс Employee (namespace NHibernateTests.Classes) и класс EmployeeMappings (namespace NHibernateTests.Mappings).

Вся моя конфигурация nhibernate задается в файле xml hibernate.cfg.xml, который в настоящее время выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
    <property name="connection.connection_string">User Id=NHIBERNATE;Password=NHIBERNATE;Data Source=XE</property>
    <property name="show_sql">false</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>

    <mapping assembly="NHibernateTests"/>
  </session-factory>
</hibernate-configuration>

Что дает мне ошибку времени выполнения: Нет персистента для: NHibernateTests.Classes.Employee

Я пробовал (и ошибался) некоторые настройки для элемента mapping, но безуспешно. Я читал, как установить ресурс для элементов hbm.xml, но не смог найти ответ для сопоставления by code.

namespace NHibernateTests.Classes
{
    public class Employee
    {
        public virtual Address Address { get; set; }
        public virtual string FirstName { get; set; }
        public virtual int Id { get; set; }
    }
}


namespace NHibernateTests.Mappings
{
    public class EmployeeMappings : ClassMapping<Employee>
    {
        public EmployeeMappings()
        {
            this.Id(e => e.Id, mapper =>
            {
                mapper.Generator(Generators.HighLow);
            });
        }
    }
}

person Serge Profafilecebook    schedule 22.09.2015    source источник


Ответы (1)


При сопоставлении по коду вы также должны настроить свою фабрику по коду. Есть один из немногих способов:

Сопоставление NHibernate 3.2 по коду — базовое сопоставление

цитируемые фрагменты кода (см. ссылку выше для более подробной информации)

private static Configuration ConfigureNHibernate()
{
  var configure = new Configuration();
  configure.SessionFactoryName("BuildIt");

  configure.DataBaseIntegration(db =>
  {
    db.Dialect();
    db.Driver();
    db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
    db.IsolationLevel = IsolationLevel.ReadCommitted;

    db.ConnectionStringName = "NH3";
    db.Timeout = 10;

    // enabled for testing
    db.LogFormattedSql = true;
    db.LogSqlInConsole = true;
    db.AutoCommentSql = true;
  });

  var mapping = GetMappings();
  configure.AddDeserializedMapping(mapping, "NHSchemaTest");
  SchemaMetadataUpdater.QuoteTableAndColumns(configure);

  return configure;
}

как получить HbmMapping

private static HbmMapping GetMappings()
{
  var mapper = new ModelMapper();

  mapper.AddMappings(Assembly.GetAssembly(typeof(ProvinceMap)).GetExportedTypes());
  var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();

  return mapping;
}
person Radim Köhler    schedule 22.09.2015