Le ProxyFactoryFactory n'a pas été configuré
Nous avons récemment mis à jour notre windows forms projet C# à partir de NHibernate 2.0 à 2.1. Nous avons mis à jour notre application.config pour inclure le "proxyfactory.factory_class", pour souligner le choisi proxy ("NHibernate.ByteCode.Château" dans notre cas). Après la mise à niveau le programme construit et exécute comme prévu, pas de problèmes. Notre problème est lorsque vous essayez d'ouvrir toutes les formes qui ont des références à NHibernate à charge dans Visual Studio 2008 designer, maintenant nous donner le message d'erreur suivant (comme si nous n'avions pas configuré le proxy):
La ProxyFactoryFactory n'a pas été
configuré. Initialiser
'proxyfactory.factory_class la propriété
de la session-la configuration d'usine
l'article avec l'une des
NHibernate.ByteCode fournisseurs.
Trace de la pile:
at NHibernate.Bytecode.AbstractBytecodeProvider.get_ProxyFactoryFactory()
at NHibernate.Cfg.Configuration.Validate()
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at DAL.NHibernateHelper..cctor() in ...\DAL\NHibernateHelper.cs:line 62
La ligne 62 de NHibernateHelper:
static NHibernateHelper()
{
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly("DAL");
sessionFactory = cfg.BuildSessionFactory(); //<-- line 62
}
Voici notre application.de configuration config pour NHibernate:
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.connection_string">Server=ourserver;initial catalog=ourdb;Integrated Security=SSPI</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
</configuration>
N'importe qui ont des indices sur la façon de remédier à ce problème? Merci!
OriginalL'auteur Jeremy Odle | 2009-07-30
Vous devez vous connecter pour publier un commentaire.
J'ai juste travaillé de la même erreur.
Mes données d'accès assemblée avait une référence adéquate Nhibernate.ByteCode.Castle.Dll et il est apparu dans sa bin/release dossier. Tout a bien fonctionné dans l'accès aux données de l'assemblée.
L'erreur a été jeté quand j'ai essayé d'utiliser le code d'accès aux données à partir de mon test de l'assemblée. Il s'est avéré que même si mon montage d'essai référencé d'accès aux données du projet, il n'a pas obtenir une copie de la Nhibernate.ByteCode.Castle.dll. Ajout d'une référence à Nhibernate.ByteCode.Castle.dll dans le test de l'assemblée a résolu le problème.
Pour ceux qui utilisent le Château ActiveRecord et obtenir la même erreur, ainsi que l'ajout de la référence à NHibernate.ByteCode.Castle.dll, vous aurez besoin d'ajouter ceci à votre fichier de configuration XML: <add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Château.ProxyFactoryFactory, NHibernate.ByteCode.Château" />
Un million de mercis, j'ai essayé d'obtenir Château ActiveRecord de travail, et vous êtes de commentaires correction du problème j'ai eu!
OriginalL'auteur bsk
J'ai eu le même problème. Pour le fixer, j'ai dû non seulement explicitement référence à la DLL, mais d'ajouter une méthode à l'épreuve DLL explicitement créé NHibernate.ByteCode.Château.ProxyFactoryFactory.
Qui a fait le tour.
OriginalL'auteur Julian Birch
Assurez-vous que dans les propriétés de votre Nhibernate.ByteCode.Château de référence, vous le réglez sur "Copy" afin qu'il soit copié dans votre dossier \bin.
OriginalL'auteur David P
Il semble que le Concepteur d'une certaine manière initialise votre SessionFactory. Avez-vous essayé d'ajouter l'ByteCodeProvider dll comme une référence à votre Projet?
[MODIFIER]
Ok..., le fait que l'Application s'exécute lorsqu'il est déployé implique que tout est correctement configuré. Si votre problème est un VS DesignMode problème. Pourquoi (le diable) êtes-vous à l'aide de NHibernate dans designmode?
Si vous en avez vraiment besoin d'essayer le réglage de la ByteCodeProvider dans votre code. Si vous n'en avez pas besoin et veulent juste un rapide workarround vous pouvez vérifier l'actuel VS mode avec ce Hack, la prévention de Nhibernate de la construction de la SessionFactory:
Si j'étais vous j'essaierais de trouver le contrôle ou que ce soit les besoins de cette statique NHibernateHelper et essayer de les dissocier.
Nous ne sommes pas (au moins intentionnellement) en essayant d'utiliser NHibernate en design de mode. De la simple ouverture d'un formulaire dans le concepteur de déclencheurs VS 2008 pour essayer d'initialiser les objets associés à la fonction form_load (dont NHibernate). La ligne de code que vous avez fourni ressemble à une option viable. Je vais donner un coup de feu et de poster une réponse sur comment cela a fonctionné.
Considérez cela comme un Hack. Je ne suis pas sûr de la météo cela permettrait également de bloquer SessionFactory création en mode de Débogage. Je pense que ce serait une meilleure solution refactoring votre NHibernateHelper. Ce sujet de l'initialisation de la SessionFactory dans le Programme.cs?
OriginalL'auteur zoidbeck