Fluent nHibernate:不支持的映射类型

Fluent nHibernate:不支持的映射类型,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我正在设置一个新的解决方案来映射从Access数据库导入的SQL数据。自动映射可以很好地处理我定义的实体,但是我需要能够使用Fluent映射类型来访问.NotFound.Ignore扩展 我在另一个项目中使用了完全相同的语法(我想!),效果很好。我是否犯了学童错误导致“不支持的映射类型'IT.Classes.Entities.Admin'”?非常感谢您的帮助 DDL: 实体: namespace IT.Classes.Entities { public class Admin {

我正在设置一个新的解决方案来映射从Access数据库导入的SQL数据。自动映射可以很好地处理我定义的实体,但是我需要能够使用Fluent映射类型来访问.NotFound.Ignore扩展

我在另一个项目中使用了完全相同的语法(我想!),效果很好。我是否犯了学童错误导致“不支持的映射类型'IT.Classes.Entities.Admin'”?非常感谢您的帮助

DDL:

实体:

namespace IT.Classes.Entities
{
    public class Admin
    {
    public virtual bool EmailUser { get; set; }

    public virtual string HelpdeskMessage { get; set; }

    public virtual string HighPriorityEmail { get; set; }

    public virtual int Id { get; set; }

    public virtual string MobileEmail { get; set; }

    public virtual string PrimaryEmail { get; set; }

    public virtual string SecondaryEmail { get; set; }
    }
}
映射:

使用FluentNHibernate.Mapping; 使用IT.class.enties

namespace IT.Classes.Mappings
{
    public sealed class AdminMap : ClassMap<Admin>
    {
        public AdminMap()
        {
            this.Id(x => x.Id);
            this.Map(x => x.EmailUser);
            this.Map(x => x.HelpdeskMessage);
            this.Map(x => x.HighPriorityEmail);
            this.Map(x => x.MobileEmail);
            this.Map(x => x.PrimaryEmail);
            this.Map(x => x.SecondaryEmail);
        }
    }
}

在配置代码中,Fluent映射中提到的类型应该是映射类,而不是被映射的类

也就是说,而不是:

return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.Add<Admin>())
            .Mappings(m => m.FluentMappings.Add<Applications>())
            .Mappings(m => m.FluentMappings.Add<Category>())
            .Mappings(m => m.FluentMappings.Add<Log>())
            .Mappings(m => m.FluentMappings.Add<Multipliers>())
            .Mappings(m => m.FluentMappings.Add<Os>())
            .Mappings(m => m.FluentMappings.Add<Priority>())
            .Mappings(m => m.FluentMappings.Add<Request>())
            .Mappings(m => m.FluentMappings.Add<Status>())
            .BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.BuildSessionFactory();
你需要说:

return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.Add<AdminMap>())
            .Mappings(m => m.FluentMappings.Add<ApplicationsMap>())
            .Mappings(m => m.FluentMappings.Add<CategoryMap>())
            .Mappings(m => m.FluentMappings.Add<LogMap>())
            .Mappings(m => m.FluentMappings.Add<MultipliersMap>())
            .Mappings(m => m.FluentMappings.Add<OsMap>())
            .Mappings(m => m.FluentMappings.Add<PriorityMap>())
            .Mappings(m => m.FluentMappings.Add<RequestMap>())
            .Mappings(m => m.FluentMappings.Add<StatusMap>())
            .BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.BuildSessionFactory();
更好的是,为了避免每个类映射都有单独的行,请使用.AddFromAssemblyOf()方法,该方法使用反射来添加给定程序集中的所有类映射:

return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminMap>())
            .BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();

我认为表上缺少主键可能是导致问题的原因,因此我将Id列设置为PK,但仍然是相同的错误。进一步考虑-创建了一个空白数据库,并使用架构生成工具尝试自动创建表,并排除数据库本身的任何问题。此操作仍然失败,并出现相同的错误。何时发生异常?请发布完整的例外!Exception.ToString()是您唯一的类吗?可能您是从另一个接口引用它,并使用
Map
而不是
References
@ColeW。我已将堆栈跟踪放在问题的主体中。更好的方法是将所有映射继承到某个接口,例如IMap和use.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
 ---> FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.

 ---> System.InvalidOperationException: Unsupported mapping type 'IT.Classes.Entities.Admin'
   at FluentNHibernate.PersistenceModel.Add(Type type) in d:\Builds\FluentNH\src\FluentNHibernate\PersistenceModel.cs:line 152
   at FluentNHibernate.Cfg.FluentMappingsContainer.Apply(PersistenceModel model) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentMappingsContainer.cs:line 127
   at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\MappingConfiguration.cs:line 84
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 252
   --- End of inner exception stack trace ---
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 264
   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 230
   --- End of inner exception stack trace ---
   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 235
   at ConsoleChecker.Program.CreateItHelpdeskSessionFactory() in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 48
   at ConsoleChecker.Program.GetRequests() in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 40
   at ConsoleChecker.Program.Main(String[] args) in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 24
return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.Add<Admin>())
            .Mappings(m => m.FluentMappings.Add<Applications>())
            .Mappings(m => m.FluentMappings.Add<Category>())
            .Mappings(m => m.FluentMappings.Add<Log>())
            .Mappings(m => m.FluentMappings.Add<Multipliers>())
            .Mappings(m => m.FluentMappings.Add<Os>())
            .Mappings(m => m.FluentMappings.Add<Priority>())
            .Mappings(m => m.FluentMappings.Add<Request>())
            .Mappings(m => m.FluentMappings.Add<Status>())
            .BuildSessionFactory();
return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.Add<AdminMap>())
            .Mappings(m => m.FluentMappings.Add<ApplicationsMap>())
            .Mappings(m => m.FluentMappings.Add<CategoryMap>())
            .Mappings(m => m.FluentMappings.Add<LogMap>())
            .Mappings(m => m.FluentMappings.Add<MultipliersMap>())
            .Mappings(m => m.FluentMappings.Add<OsMap>())
            .Mappings(m => m.FluentMappings.Add<PriorityMap>())
            .Mappings(m => m.FluentMappings.Add<RequestMap>())
            .Mappings(m => m.FluentMappings.Add<StatusMap>())
            .BuildSessionFactory();
return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminMap>())
            .BuildSessionFactory();