ASP.Net MVC& NHibernate Burrow&流利的NHibernate

时间:2009-06-09 10:44:46

标签: c# asp.net-mvc nhibernate fluent-nhibernate nhibernate-burrow

我在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);
    }
}

如果您需要更多详细信息,请随时与我们联系。

由于

2 个答案:

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

有谁知道为什么我以前的方法不起作用?

由于