Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[NHibernate2] Config zetten in app.config

Pagina: 1
Acties:

  • CTVirus
  • Registratie: Januari 2000
  • Laatst online: 17-11 11:39

CTVirus

Dexterslab FAN

Topicstarter
Ik ben een applicatie in elkaar aan het zetten met NHibernate, LINQ en attributes. Voornamelijk om dit alles te testen (, gezien het nog niet echt productie klaar is). SVN van NHibernate staat hier: https://nhibernate.svn.sourceforge.net/svnroot/nhibernate. Wat bij mij niet werkt is de configuratie in de app.config te zetten, bij de vorige versie werkte dit wel. Je kan dit oplossen door het in een externe xml te gooien, maar dat heb ik liever niet.

Ik heb uiteraard de committer (fabiomaulo) al gemaild, maar die heeft nog niet terug gemaild.

mijn app.config ziet er zo uit:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section
            name="hibernate-configuration"
            type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
        />
        <section name="log4net"
          type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0" />
    </configSections>
    <hibernate-configuration>
        <session-factory>
            <property name="connection.connection_string">;Persist Security Info=True;User ID=;Initial Catalog=;Data Source=</property>
            <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
            <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        </session-factory>
    </hibernate-configuration>
    <log4net>
        <root>
          <level value="DEBUG" />
          <appender-ref ref="ConsoleAppender" />
        </root>
        <appender name="ConsoleAppender" 
                  type="log4net.Appender.ConsoleAppender" >
        </appender>
  </log4net>
</configuration>


Hij gooit deze exceptie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
System.TypeInitializationException was unhandled
  Message="De type-initialisatiefunctie voor Objects.ORMSessionFactory heeft een uitzondering veroorzaakt."
  Source="Objects"
  TypeName="Objects.ORMSessionFactory"
  StackTrace:
       bij Objects.ORMSessionFactory.GetCurrentSession()
       bijObjects.Test.Program.Main() in T:\SVN\trunk\src\Objects.Test\Test.cs:regel 12
       bij System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       bij System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       bij Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       bij System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bij System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.TypeInitializationException
       Message="De type-initialisatiefunctie voor NHibernate.Cfg.Environment heeft een uitzondering veroorzaakt."
       Source="NHibernate"
       TypeName="NHibernate.Cfg.Environment"
       StackTrace:
            bij NHibernate.Cfg.Environment.get_Properties()
            bij NHibernate.Cfg.Configuration.Reset() in t:\SVN\NHibernate\trunk\nhibernate\src\NHibernate\Cfg\Configuration.cs:regel 100
            bij NHibernate.Cfg.Configuration..ctor(SettingsFactory settingsFactory) in t:\SVN\NHibernate\trunk\nhibernate\src\NHibernate\Cfg\Configuration.cs:regel 165
            bij NHibernate.Cfg.Configuration..ctor() in t:\SVN\NHibernate\trunk\nhibernate\src\NHibernate\Cfg\Configuration.cs:regel 181
            bij Objects.ORMSessionFactory..cctor() in T:\SVN\trunk\src\Objects\ORMSessionFactory.cs:regel 22
       InnerException: System.NullReferenceException
            Message="De objectverwijzing is niet op een exemplaar van een object ingesteld."
            Source="NHibernate"
            StackTrace:
                 bij NHibernate.Cfg.Environment.LoadGlobalPropertiesFromAppConfig() in t:\SVN\NHibernate\trunk\nhibernate\src\NHibernate\Cfg\Environment.cs:regel 207
                 bij NHibernate.Cfg.Environment..cctor() in t:\SVN\NHibernate\trunk\nhibernate\src\NHibernate\Cfg\Environment.cs:regel 175
            InnerException:



De functie in NHibernate die de exceptie gooit, deze staat in de class NHibernate.Cfg.Environment rond regel 200. Bij de regel met de foreach gooit hij een exceptie omdat NHconfig.SessionFactory.Properties null is.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private static void LoadGlobalPropertiesFromAppConfig()
{
    object config = ConfigurationManager.GetSection(CfgXmlHelper.CfgSectionName);

    if (config == null)
    {
        log.Info(string.Format("{0} section not found in application configuration file",CfgXmlHelper.CfgSectionName));
        return;
    }

    IHibernateConfiguration NHconfig = config as IHibernateConfiguration;
    if (NHconfig == null)
    {
        log.Info(string.Format("{0} section handler, in application configuration file, is not IHibernateConfiguration, section ignored", CfgXmlHelper.CfgSectionName));
        return;
    }

    GlobalProperties[PropertyBytecodeProvider] = CfgXmlHelper.ByteCodeProviderToString(NHconfig.ByteCodeProviderType);
    GlobalProperties[PropertyUseReflectionOptimizer] = NHconfig.UseReflectionOptimizer.ToString();

    foreach (KeyValuePair<string, string> kvp in NHconfig.SessionFactory.Properties)
    {
        GlobalProperties[kvp.Key] = kvp.Value;
    }
}


Hij blijkt die waardes uit de config niet goed in de Dictionary te gooien waardoor deze leeg blijft. Je zou zeggen dit komt door foutieve naamgeving in je xml, maar als je de code bekijkt die dit inleest dan lijkt het allemaal correct.

hibernate leest de configuratie in met behulp van de ConfigurationManager.GetSection() welke ingbouwd is .net.

Heeft iemand enig idee waar het fout gaat?

[ Voor 0% gewijzigd door een moderator op 25-06-2008 12:54 . Reden: Code tags gefix0red ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Ik zou in ieder geval de passwords, en userid's uit de code halen die je hier gepost hebt... of je moet bezoek van buiten niet erg vinden, dit is natuurlijk de goden verzoeken.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:11
Gewoon een gokje -ik heb hier niet de nodige tools om te testen-, maar heb je al eens geprobeerd om in je config file dit te doen:
code:
1
<session-factory  xmlns="urn:nhibernate-configuration-2.2">

ipv
code:
1
<session-factory>

https://fgheysels.github.io/


  • CTVirus
  • Registratie: Januari 2000
  • Laatst online: 17-11 11:39

CTVirus

Dexterslab FAN

Topicstarter
Dat is inderdaad de oplossing, ik snap alleen niet welk deel van de nhibernate code dit vereist.

Onderhand heb ik NHibenate 2.0, Nhibernate.LINQ en NHibernate.Mapping.Attributes draaien. Het lijkt een goede concurent voor Linq to entities

[ Voor 43% gewijzigd door CTVirus op 20-06-2008 17:26 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
CTVirus schreef op vrijdag 20 juni 2008 @ 17:24:
Dat is inderdaad de oplossing, ik snap alleen niet welk deel van de nhibernate code dit vereist.

Onderhand heb ik NHibenate 2.0, Nhibernate.LINQ en NHibernate.Mapping.Attributes draaien. Het lijkt een goede concurent voor Linq to entities
Nou, Linq to NHibernate is verre van af, er zit bv geen groupjoin in en allerlei andere zaken die je vroeg of laat tegenkomt in linq queries. Er is ook niet echt iemand die er dedicated aan werkt. Dus concurrent voor Linq to Entities is echt onzin, Linq to NHibernate is echt niet bruikbaar in professionele apps.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • CTVirus
  • Registratie: Januari 2000
  • Laatst online: 17-11 11:39

CTVirus

Dexterslab FAN

Topicstarter
In april, mei en juni zijn er toch weer een stuk of 70 commits, dit jaar hebben toch een stuk of 10 mensen code bijgedragen.

Onderhand zitten groupjoins er ook al wel in.

Maar je hebt gelijk dat het nog niet echt de experimenteer fase ontstegen is en zeker niet productie klaar. Ik had daarom ook moeten zeggen dat het een concurrent van linq to entities lijkt te worden.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
CTVirus schreef op woensdag 25 juni 2008 @ 10:36:
In april, mei en juni zijn er toch weer een stuk of 70 commits, dit jaar hebben toch een stuk of 10 mensen code bijgedragen.

Onderhand zitten groupjoins er ook al wel in.
Nope, nog altijd commented out.
http://rhino-tools.svn.so...Translator.cs?view=markup

Is ook niet simpel om dat in te bouwen btw.
Maar je hebt gelijk dat het nog niet echt de experimenteer fase ontstegen is en zeker niet productie klaar. Ik had daarom ook moeten zeggen dat het een concurrent van linq to entities lijkt te worden.
Ik denk dat het nooit zover komt met dit linq to nhibernate project. Het is echt intens veel werk, en daar is gewoon geen tijd voor. Maar goed, we'll see. Misschien als ik tijd overheb volgend jaar dat ik de linq provider die wij hebben port naar nhibernate, maar zover is het nog lang niet :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:11
Hmm, ik kaap even dit topic.
Ik zie dat jij in jouw code dit doet:
C#:
1
2
3
object config = ConfigurationManager.GetSection(CfgXmlHelper.CfgSectionName);

IHibernateConfiguration NHconfig = config as IHibernateConfiguration;

Dit werkt, als in: config kan gecast worden naar een object dat IHibernateConfiguration implementeert.

Echter, doe je dit:
C#:
1
2
3
Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
object section = cfg.GetSection (CfgXmlHelper.CfgSectionName);
IHibernateConfiguration NHConfig = section as IHibernateConfiguration

Dan werkt dit niet; section kan niet gecast worden naar IHibernateConfiguration.

Als ik even debug, dan zie ik dat het eerste code-voorbeeld een object returned van het type 'HibernateConfiguration', en het 2de voorbeeld een object van het type DefaultSection.

Iemand een idee wat hier aan de hand kan zijn ?
Ik heb ergens gezien dat er iemand bij een gelijkaardig voorbeeld dit dit:
C#:
1
2
3
Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
cfg.Sections.Add ("customsectionname", new ConfigurationSectionType());
cfg.GetSection("customsectionname");
Wat dan bleek te werken ...
Echter, NHibernate 2.0 bevat geen class die afleid van ConfigurationSection ....

https://fgheysels.github.io/

Pagina: 1