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

问题描述 投票:0回答:1

我正在创建另一个共享公共实体的应用程序,因此我将实体和映射移动到这个新的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();
    }
c# nhibernate nhibernate-mapping
1个回答
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());
© www.soinside.com 2019 - 2024. All rights reserved.