8

私は、AccessデータベースからインポートされたSQLデータに対してマップする新しいソリューションを設定しています。自動マッピングは私が定義したエンティティに対してうまく機能しますが、Fluentマッピングタイプを使用して.NotFound.Ignore拡張子にアクセスできるようにする必要があります。Fluent nHibernate:サポートされていないマッピングタイプ

私は別のプロジェクトでもまったく同じ構文を使っています(私は思う!)これはうまくいきます。 「サポートされていないマッピングタイプ 'IT.Classes.Entities.Admin'」を引き起こすために、児童生徒のエラーが発生しましたか?どんな助けでも大歓迎です。

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.Mappingを使用して

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

セッションファクトリー:

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

私は彼らが私の流暢なマッピングで問題を強調するだろうかどうかを確認するために、自動マッピングをエクスポートするだろうと思ったけど、彼らは正しいように見えます:

<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

フルスタックトレース。コンフィギュレーションコードの音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 
+0

私は、テーブルのプライマリキーが原因で問題が発生している可能性がありますので、ID列をPKとして設定しても同じエラーが表示されます。 – Rowan

+0

さらに、空のデータベースを作成し、スキーマ生成ツールを使用してテーブルを自動的に作成し、データベース自体の問題を排除しようとしました。これは同じエラーで失敗します。 – Rowan

+0

例外はいつ発生しますか?完全な例外を投稿してください! Exception.ToString() –

答えて

9

、流暢マッピングで述べたタイプのクラスがマッピングされていない、マップクラスであるべきです。代わりに、ある

は:

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.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.AddFromAssemblyOf<AdminMap>()) 
      .BuildSessionFactory(); 
+0

ありがとう、それは校長のエラーでした! – Rowan

+1

より良いアプローチは、すべてのマップを継承するいくつかのインターフェイスにIMapを使用し、.Mappingsを使用する(m => m.FluentMappings.AddFromAssemblyOf ()) –

関連する問題