获取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:在同一解决方案中将公共代码移动到公共项目后,“未映射空缺”的主要内容,如果未能解决你的问题,请参考以下文章