Sto configurando una nuova soluzione per mappare i dati SQL che sono stati importati da un database di Access. Le mappature automatiche funzionano bene con le entità che ho definito, ma devo essere in grado di usare il tipo di mappatura Fluent per dare accesso all'estensione .NotFound.Ignore.Fluent nHibernate: Tipo di mappatura non supportato
Ho usato esattamente la stessa sintassi in un altro progetto (credo!) Che funziona bene. Ho commesso un errore di scolaro per causare il "Tipo di mapping non supportato" IT.Classes.Entities.Admin '"? Ogni aiuto è molto apprezzato.
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]
Entity:
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; }
}
}
Mapping:
utilizzando FluentNHibernate.Mapping; utilizzando IT.Classes.Entities;
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);
}
}
}
Sessione di fabbrica:
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();
}
EDIT
ho pensato di esportare le mappature auto per vedere se avrebbero evidenziare un problema nel mio mappature fluente ma sembrano essere corretto :
<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>
EDIT 2
Traccia stack completo. Nota 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:\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
Ho pensato che la mancanza della chiave primaria sulla tabella potrebbe causare il problema, quindi ho impostato la colonna Id come PK ma ho ancora lo stesso errore. – Rowan
Inoltre, ha creato un database vuoto e ha utilizzato lo strumento di generazione dello schema per tentare di creare automaticamente le tabelle e escludere eventuali problemi con il database stesso. Ciò non riesce ancora con lo stesso errore. – Rowan
Quando si verifica l'eccezione? Per favore pubblica l'eccezione completa! Exception.ToString() –