代码之家  ›  专栏  ›  技术社区  ›  Sylvain

如何从IronPython配置NHibernate类映射?

  •  4
  • Sylvain  · 技术社区  · 16 年前

    我尝试使用IronPython中的NHibernate。我已将NHibernate依赖项复制到我的C:\Users\shamel\python\HelloPy\libs目录。

    我有以下IronPython代码:

    import sys
    sys.path.append("C:\Users\shamel\python\HelloPy\libs") 
    
    import clr
    clr.AddReference("NHibernate")
    clr.AddReference("LinFu.DynamicProxy")
    clr.AddReference("NHibernate.ByteCode.LinFu")
    
    from Entities.Entity import Customer 
    from NHibernate.Cfg import Configuration
    
    configuration = Configuration();
    configuration.Configure("PocoLib.cfg.xml");
    configuration.AddXmlFile("Customer.hbm.xml");
    factory = configuration.BuildSessionFactory();
    

    我的实体类在实体包的entity.py中定义。这就解释了 from Entities.Entity import Customer

    下面是我的Customer.hbm.xml文件的样子

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Entities"
                   namespace="Entities">
    
    <class name="Customer" lazy="false">
    ...
    </class>
    

    configuration.AddXmlFile("Customer.hbm.xml");
    StandardError: Could not compile the mapping document: Customer.hbm.xml
    ERROR: Module: nhtests could not be imported.
    

    我想NHibernate无法解决这个问题 assembly namespace hibernate-mapping (问题不是找不到xml文件;我尝试使用一个不存在的名称,但出现了另一个错误)

    任何帮助都将不胜感激。

    狡猾的

    :这是堆栈跟踪。我想这证实了NHibernate无法找到我的类型。

    *** Outer ***
    MappingException
    persistent class Entities.Customer, Entities not found
    at Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.CallWithInstance(Object[] args, Boolean& shouldOptimize)
    at IronPython.Runtime.Types.BuiltinFunction.BuiltinMethodCaller`2.Call1(CallSite site, CodeContext context, TFuncType func, T0 arg0)
    at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
    at Microsoft.Scripting.Utils.InvokeHelper`6.Invoke(Object arg0, Object arg1, Object arg2, Object arg3, Object arg4)
    at Microsoft.Scripting.Utils.ReflectedCaller.Invoke(Object[] args)
    at Microsoft.Scripting.Interpreter.CallInstruction.Run(InterpretedFrame frame)
    at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
    *** Inner ***
    MappingException
    persistent class Entities.Customer, Entities not found
    at NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullName, String errorMessage)
    at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary`2 inheritedMetas)
    at NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(XmlNode node, HbmClass classSchema, IDictionary`2 inheritedMetas)
    at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(XmlNode parentNode, IDictionary`2 inheritedMetas)
    at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(XmlNode node)
    at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
    *** Inner Inner ***
    FileNotFoundException
    Could not load file or assembly 'Entities' or one of its dependencies. The system cannot find the file specified.
    at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
    at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
    at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
    at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
    at System.Reflection.Assembly.Load(String assemblyString)
    at NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName name, Boolean throwOnError)
    at NHibernate.Util.ReflectHelper.ClassForName(String name)
    at NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullName, String errorMessage)
    

    2009年12月29日编辑 :

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ned Batchelder    15 年前

    不能在IronPython中定义的实体上使用IronPython中的NHibernate。

    推荐文章