我在ASP.Net MVC应用程序中遇到以下运行时错误:
NHibernate.MappingException: No persister for: MyProject.Model.MyDomainObject
我在我的应用程序中引用了洞穴和流畅的二进制文件,并在Application_Start上重新配置了Global.asax中的洞穴,如下所示:
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);
}
}
如果您需要更多详细信息,请随时与我们联系。
由于
答案 0 :(得分:4)
要回答初始方法失败的原因,cfg.AddMappingsFromAssembly()
会扫描目标程序集,以获取程序集中内置的预配置嵌入式XML映射文件。由于您在运行时生成“Fluently”映射,因此这些XML文件不存在。
另一方面,下面反映了程序集以查找定义的'FluentMappings'(即从ClassMap&lt;&gt;得到的那些),动态生成映射,并将其注入到配置中。在调用FluentMappings.AddFromAssembly()
Fluently.Configure(cfg)
.Mappings(m => m.FluentMappings.AddFromAssembly(assembly))
答案 1 :(得分:0)
好的,我可以通过以下方式让它工作:
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();
有谁知道为什么我以前的方法不起作用?
由于