我正在创建另一个共享公共实体的应用程序,因此我将实体和映射移到了这个新的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();
}
答案 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());