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