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

时间:2019-03-25 11:50:31

标签: c# nhibernate nhibernate-mapping

我正在创建另一个共享公共实体的应用程序,因此我将实体和映射移到了这个新的Common Project。我已经更改了名称空间,添加了项目依赖关系,并添加了对该新普通项目的引用,但是却遇到了未映射的错误。是否缺少我在启动文件中添加对它的引用之类的步骤?

ModelMapper

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

1 个答案:

答案 0 :(得分:1)

看来问题出在这里。

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