0

我的公司有多个站点,它们引用了相同的数据库和核心代码库。然后我们有一个管理数据的CMS。

在核心库中,我有一个 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 编辑信息。

这是我当前到 Log 类的流畅映射,它引用了 Site 类。

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 的代码放入核心库中。

谢谢您的帮助

桑德拉

4

1 回答 1

5

“未映射的类”错误通常源于未记录该 ClassMap 的配置。

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

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

看来您的两个 ClassMap(至少在帖子中提到的那些)位于不同的程序集中。您可以指定多个程序集:

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

要准确查看正在映射的内容,您可以添加

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

给您FluentConfiguration,它将返回类映射、适用于它们的约定以及它们为什么/为什么不有效。

于 2011-06-03T12:45:28.503 回答