0

流暢な休止状態は初めてで、フィルターを作成しようとすると例外が発生します。

Fluent Nhibernate で NHibernate フィルターを定義するためのこの構文を見つけましたか?

これは、アプリケーションを実行しようとするまでは、流暢なフィルターを作成する方法を説明しています。例外があります(以下を参照)。私のコードは、上記のリンクと同じです。例外が発生するコードは次のとおりです。HotelMap などのマッピング用のアセンブリを 1 つだけ追加すると、問題はなくなります。2 つ以上を追加すると、例外が発生します。

どんな考えでも大歓迎です。

private static ISessionFactory BuildSessionFactory()
    {
        var connectionString = DatabaseConnectionStringsFactory.GetConnectionString(DatabaseConnectionStringsFactory.DEFAULT);
        try
        {
            var session = Fluently.Configure()
                .Database(
                    MsSqlConfiguration.MsSql2008.
                        ConnectionString(connectionString).
                        AdoNetBatchSize(50)
                )
                .Mappings(m => m.FluentMappings.Add(typeof(CultureFilter.PonyConditionFilter)))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AgentMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<HotelMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RoomMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SeasonMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<BookingsMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CustomerMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PriceMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<GroupRoomsMap>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<PermissionsToBooking>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Address>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Owner>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<BookingCancelledBy>())
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RelatedBookings>())
                .ExposeConfiguration(c =>c.SetProperty("current_session_context_class", "thread_static"))
                .BuildSessionFactory();

            session.OpenSession().EnableFilter("PonyConditionFilter").SetParameter("condition", false);
            return session;

        }
        catch (Exception e)
        {
            throw e;
        }
    }

ここに例外があります

  [MappingException: Duplicated filter-def named: PonyConditionFilter]
   NHibernate.Cfg.Mappings.AddFilterDefinition(FilterDefinition definition) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Mappings.cs:472
   NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddFilterDefinitions(HbmMapping mappingSchema) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\MappingRootBinder.cs:75
   NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(HbmMapping mappingSchema) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\MappingRootBinder.cs:26
   NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:522

  [MappingException: Could not compile the mapping document: (XmlDocument)]
   NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:342
   NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:530
   NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:499
   NHibernate.Cfg.Configuration.ProcessMappingsQueue() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1832
   NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument document) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1823
   NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String name) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:1816
   NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:632
   NHibernate.Cfg.Configuration.AddDocument(XmlDocument doc, String name) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:483
   NHibernate.Cfg.Configuration.AddDocument(XmlDocument doc) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:455
   FluentNHibernate.PersistenceModel.Configure(Configuration cfg) in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\PersistenceModel.cs:283
   FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\MappingConfiguration.cs:88
   FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:249

   [FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.]
4

1 に答える 1

0

すべてのマッピングが同じアセンブリにある場合は、アセンブリごとに 1 つの AddFromAssembly 行を追加するだけで済みます。

Fluent NHibernate は、アセンブリ全体をスキャンしてマッピングを追加します。

代わりにこれを試してください:

var session = Fluently.Configure()
                .Database(
                    MsSqlConfiguration.MsSql2008.
                        ConnectionString(connectionString).
                        AdoNetBatchSize(50)
                )
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<AgentMap>())
                .ExposeConfiguration(c =>c.SetProperty("current_session_context_class", "thread_static"))
                .BuildSessionFactory();
于 2013-10-08T20:39:27.990 に答える