获取NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:在同一解决方案中将公共代码移动到公共项目后,“未映射空缺”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:在同一解决方案中将公共代码移动到公共项目后,“未映射空缺”相关的知识,希望对你有一定的参考价值。

我正在创建另一个共享公共实体的应用程序,因此我将实体和映射移动到这个新的Common Project。我已经更改了名称空间,添加了项目依赖项并添加了对这个新常见项目的引用,但我得到了未映射的错误。我是否缺少步骤,比如在启动文件中添加对它的引用或什么?

模型文件夹

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

以上是关于获取NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:在同一解决方案中将公共代码移动到公共项目后,“未映射空缺”的主要内容,如果未能解决你的问题,请参考以下文章

java反射获取属性值

Shell 获取路径

iOS 获取文件大小

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

js如何获取时间点?

iOS 获取设备的各种信息的方法