ASP.Net MVC и NHibernate Нора и Свободный NHibernate - PullRequest
1 голос
/ 09 июня 2009

В моем приложении 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 ]

4 голосов
/ 14 июня 2009

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

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

Fluently.Configure(cfg)
    .Mappings(m => m.FluentMappings.AddFromAssembly(assembly))
0 голосов
/ 14 июня 2009

Хорошо, я заставил его работать следующим образом:

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();

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

Спасибо

...