0

我的公司有多个引用相同数据库和核心代码库的站点。 然后我们有一个CMS来管理数据。错误:引用映射到不同程序集的流利NHibernate映射

在核心库中,我有一个Site类,它包含一组关于每个站点的基本信息。这是我对它的流利映射。

using Core.Model; // Where Site class exists 

namespace Core.Repository.NHibernate.Mappings 
{ 
    public class SiteMapping : ClassMap<Site> 
    { 
     public SiteMapping() 
     { 
      Table("f_site"); 
      Id(x => x.Id, "f_site_id").GeneratedBy.Identity(); 
      Map(x => x.Domain, "domain_name").Not.Nullable(); 
     } 
    } 
} 

由于CMS的一部分,我们保留日志编辑谁和什么时候的。但我只想在CMS中引用Log类和映射,而不是在我的核心代码中,因为人们只能通过CMS编辑信息。

这是我目前流利的映射到引用Site类的Log类。

using Core.Model; // where Site class exists 
using Cms.Model; // where Log and CmsUser classes exists 

namespace Cms.Repository.NHibernate.Mappings 
{ 
    public class LogMapping : ClassMap<Log> 
    { 
     public LogMapping() 
     { 
      Table("f_log"); 
      Id(x => x.Id, "f_log_id").GeneratedBy.Identity(); 
      Map(x => x.Message, "message"); 
      Map(x => x.LogType, "d_log_type_id").CustomType<LogType>(); 
      Map(x => x.LogOperation, "d_log_operation_id").CustomType<LogOperation>(); 
      Map(x => x.Date, "log_date"); 

      References<Site>(x => x.Site, "f_site_id") 
       .ForeignKey("f_site_id") 
       .Cascade.None(); 

      References<CmsUser>(x => x.User, "userId") 
       .ForeignKey("userId") 
       .Cascade.None(); 
     } 
    } 
} 

理论上,这伟大的工程,但随着日志映射错误以下

Cms.Tests.Repository.NHibernate.Repository.TestLogRepository.TestLogMappings: 
StructureMap.StructureMapException : StructureMap Exception Code: 207 
Internal exception while creating Instance 'e46153a3-2bfe-4279-8749-a42d7a6dd10c' of PluginType Core.Repository.NHibernate.SessionStorage.ISessionContainer`1[[HbmCms.Repository.NHibernate.Mappings.Config.LogMapping, Cms.Repository.NHibernate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Core.Repository.NHibernate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. Check the inner exception for more details. 
    ----> StructureMap.StructureMapException : StructureMap Exception Code: 207 
Internal exception while creating Instance '9e72c2ff-e3f4-4b54-9f34-3422a7b982a7' of PluginType Core.Repository.NHibernate.SessionStorage.ISessionFactoryContainer`1[[Cms.Repository.NHibernate.Mappings.Config.LogMapping, Cms.Repository.NHibernate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. Check the inner exception for more details. 
    ----> FluentNHibernate.Cfg.FluentConfigurationException : An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail. 


    ----> NHibernate.MappingException : An association from the table f_log refers to an unmapped class: Core.Model.Site 

没有人有任何想法如何让我的CMS映射到引用核心站点映射?这是在两个项目中获得映射的第一批代码,但是它会做一些我们会做的事情,因为很多东西只是您在CMS中查看和执行的内容。如果我可以避免这种情况,我真的不想将仅CMS代码放入Core库。

感谢您的帮助

桑德拉

回答

5

一个'未映射类的错误通常是从没有记载,类映射配置茎。

在你FluentConfiguration,你可能有类似的东西:

.Mappings(m => m.FluentMappings 
       .AddFromAssemblyOf<T>()) 

看来,你的两个ClassMaps(至少那些在帖子中提到的)是不同的组件。您可以指定多个组件:

.Mappings(m => m.FluentMappings 
       .AddFromAssemblyOf<T1>() 
       .AddFromAssemblyOf<T2>()) 

看到什么被映射,你可以添加

.Diagnostics(d => d.Enable().OutputToConsole()) 

FluentConfiguration,它会返回类图,该公约适用于他们,以及为什么/他们为什么不是有效的。

+0

非常好 - 非常感谢,效果很好 – Saan 2011-06-03 14:22:00