获取 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: 'Vacancy is not mapped' 在将通用代码移动到同一解决方案中的通用项目之后

Getting NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: 'Vacancy is not mapped' after moving common code to a Common Project in the same solution

我正在创建另一个共享公共实体的应用程序,因此我将实体和映射移到了这个新的公共项目中。我更改了命名空间,添加了项目依赖项并添加了对这个新的公共项目的引用,但我收到了未映射错误。有没有我遗漏的步骤,比如在启动文件中添加对它的引用之类的?

模型映射器

    private ISessionFactory ConfigureNHibernate() {
        var cfg = new Configuration();

        cfg.DataBaseIntegration(db => {
            db.ConnectionString = Configuration.GetConnectionString("MyConnection");
            db.Dialect<MsSql2012Dialect>();
            db.BatchSize = 500;
            db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;

        var mapper = new ModelMapper();
        mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());
        cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
        cfg.AddAssembly("MyProject.Common");

        return cfg.BuildSessionFactory();
    }

看来问题出在这里了。

var mapper = new ModelMapper();
mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());
cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
cfg.AddAssembly("MyProject.Common");

Assembly.GetExecutingAssembly() 不会成为您的新地图项目程序集。

我总是在一个单独的项目中创建我的域模型并将其传递给 nhibernate 初始化程序。

所以我的 NhibernateInitializer 上有 属性,它采用映射程序集

private Assembly MappingAssembly
{
    get { return _mappingAssembly ?? (_mappingAssembly = Assembly.Load(_mappingAssemblyName)); }
}

加载我的映射程序集。

然后当需要在我的映射器中配置它们时,代码是

    _mapper.AddMappings(MappingAssembly.GetExportedTypes());