ASP.Net MVC и NHibernate Нора и Свободный NHibernate

Я получаю следующую ошибку времени выполнения в моем приложении ASP.Net MVC:

NHibernate.MappingException: No persister for: MyProject.Model.MyDomainObject

Я ссылаюсь на норы и текущие двоичные файлы в моем приложении и перенастраиваю норы в Global.asax на Application_Start следующим образом:

var bf = new BurrowFramework();
IFrameworkEnvironment fe = bf.BurrowEnvironment;
Configuration cfg = fe.GetNHConfig("PersistenceUnit1");
cfg.AddMappingsFromAssembly(Assembly.LoadFrom(Server.MapPath("~/bin/MyProject.Data.dll")));
fe.RebuildSessionFactories();

Я не могу за всю жизнь понять это. Если я устанавливаю свободную модель NHibernate AutoPersistenceModel с моими доменными объектами, тогда все работает нормально, это просто не работает для настроенных вручную карт потоков.

Единственная карта, которую я имею, выглядит следующим образом:

public class MyDomainObjectMap : ClassMap<MyDomainObject>
{
    public MyDomainObjectMap()
    {
        WithTable("my_domain_object");
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Description);
    }
}

Любая помощь будет высоко ценится, пожалуйста, дайте мне знать, если вам нужно больше деталей.

Спасибо

2 ответа

Чтобы ответить, почему ваш первоначальный подход не удался, cfg.AddMappingsFromAssembly() сканирует целевую сборку на наличие предварительно настроенных встроенных файлов сопоставления XML, встроенных в сборку. Поскольку вы генерируете сопоставления "Свободно" во время выполнения, эти файлы XML не существуют.

Следующее, с другой стороны, отражает сборку, которую нужно найти для определенных вами "FluentMappings" (т. Е. Производных от ClassMap<>), динамически генерирует сопоставление и внедряет его в конфигурацию. Отображения не существуют, пока вы не позвоните в FluentMappings.AddFromAssembly()

Fluently.Configure(cfg)
    .Mappings(m => m.FluentMappings.AddFromAssembly(assembly))

Хорошо, я получил его на работу, выполнив следующие действия:

var bf = new BurrowFramework();
IFrameworkEnvironment fe = bf.BurrowEnvironment;
Assembly assembly = Assembly.LoadFrom(Server.MapPath("~/bin/MyProject.Data.dll"));
Configuration cfg = fe.GetNHConfig("PersistenceUnit1");

Fluently.Configure(cfg)
    .Mappings(m => m.FluentMappings.AddFromAssembly(assembly))
    .BuildConfiguration();

fe.RebuildSessionFactories();

Кто-нибудь знает, почему мой предыдущий подход не сработал?

Спасибо

Другие вопросы по тегам