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();
Кто-нибудь знает, почему мой предыдущий подход не сработал?
Спасибо