Fluent nHibernate: неподдерживаемый тип отображения

я настраиваю новое решение для сопоставления с данными SQL, которые были импортированы из базы данных Access. Автоматическое сопоставление отлично работает с объектами, которые я определил, но мне нужно иметь возможность использовать тип Fluent mapping для доступа к нему .Не нашел.Игнорировать расширение.

я использовал точно такой же синтаксис в другом проекте (я думаю!) который отлично работает. Я сделал ошибку школьника, чтобы вызвать "неподдерживаемый тип отображения".Занятия.Сущности.Админ"? Любая помощь-это много оцененный.

DDL:

CREATE TABLE [dbo].[Admin](
    [ID] [int] NOT NULL,
    [primaryEmail] [nvarchar](50) NULL,
    [secondaryEmail] [nvarchar](50) NULL,
    [highPriorityEmail] [nvarchar](50) NULL,
    [MobileEmail] [nvarchar](50) NULL,
    [EmailUser] [bit] NOT NULL,
    [HelpDeskMessage] [nvarchar](max) NULL
) ON [PRIMARY]

сущности:

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.Отображение; использующий ее.Занятия.Сущности;

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);
        }
    }
}

Сессия Завода:

private static ISessionFactory CreateItHelpdeskSessionFactory()
{
    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();
}

редактировать

Я думал, что экспортирую автоматические сопоставления, чтобы увидеть, будут ли они выделять проблему в моих беглых сопоставлениях, но они кажутся правильными:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="IT.Classes.Entities.Admin, ITClasses, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Admin`">
    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Id" />
      <generator class="identity" />
    </id>
    <property name="EmailUser" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="EmailUser" />
    </property>
    <property name="HelpdeskMessage" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="HelpdeskMessage" />
    </property>
    <property name="HighPriorityEmail" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="HighPriorityEmail" />
    </property>
    <property name="MobileEmail" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="MobileEmail" />
    </property>
    <property name="PrimaryEmail" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="PrimaryEmail" />
    </property>
    <property name="SecondaryEmail" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="SecondaryEmail" />
    </property>
  </class>
</hibernate-mapping>

изменить 2

полная трассировка стека. Примечание potentialreasons = 0.

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:BuildsFluentNHsrcFluentNHibernatePersistenceModel.cs:line 152
   at FluentNHibernate.Cfg.FluentMappingsContainer.Apply(PersistenceModel model) in d:BuildsFluentNHsrcFluentNHibernateCfgFluentMappingsContainer.cs:line 127
   at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) in d:BuildsFluentNHsrcFluentNHibernateCfgMappingConfiguration.cs:line 84
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:BuildsFluentNHsrcFluentNHibernateCfgFluentConfiguration.cs:line 252
   --- End of inner exception stack trace ---
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:BuildsFluentNHsrcFluentNHibernateCfgFluentConfiguration.cs:line 264
   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:BuildsFluentNHsrcFluentNHibernateCfgFluentConfiguration.cs:line 230
   --- End of inner exception stack trace ---
   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:BuildsFluentNHsrcFluentNHibernateCfgFluentConfiguration.cs:line 235
   at ConsoleChecker.Program.CreateItHelpdeskSessionFactory() in E:codecode_testing10ASPHelpdesksConsoleCheckerProgram.cs:line 48
   at ConsoleChecker.Program.GetRequests() in E:codecode_testing10ASPHelpdesksConsoleCheckerProgram.cs:line 40
   at ConsoleChecker.Program.Main(String[] args) in E:codecode_testing10ASPHelpdesksConsoleCheckerProgram.cs:line 24

1 ответов


в вашем коде конфигурации типы, упомянутые в 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();

вам нужно сказать:

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();

еще лучше, чтобы избежать отдельной строки для каждой карты классов, используйте .Метод AddFromAssemblyOf (), который использует отражение для добавления всех сопоставлений классов из данной сборки:

return
    Fluently.Configure().Database(
        MsSqlConfiguration.MsSql2008.ConnectionString(
            ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminMap>())
            .BuildSessionFactory();