我是Nhibernate的新手。我面临以下问题:
Exception thrown: 'NHibernate.MappingException' in NHibernate.dll
NHibernate.MappingException: Could not add assembly ORM_dscnew ---> System.IO.FileNotFoundException: Could not load file or assembly 'ORM_dscnew' or one of its dependencies. The system cannot find the file specified.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
at NHibernate.Cfg.Configuration.AddAssembly(String assemblyName)
--- End of inner exception stack trace ---
at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception)
at NHibernate.Cfg.Configuration.AddAssembly(String assemblyName)
at viroffice.ORM_sessionf.Init() in D:GDriveProjectsVirOfficevirofficeDataObjectsORM_sessionf.vb:line 7
执行功能时:
Private Shared sFactory As NHibernate.ISessionFactory
Private Shared Sub Init()
Dim config As New NHibernate.Cfg.Configuration()
Try
config.AddAssembly("ORM_dscnew")
sFactory = config.BuildSessionFactory()
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex)
Exit Sub
End Try
End Sub
执行上述函数时,我会遇到错误。
orm_dscnew.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2" namespace = "viroffice.DataObjects" assembly = "viroffice">
<class name = "ORM_dscnew" table="dsc_new">
<id name = "new_id">
<generator class = "native"/>
</id>
<property name = "vnm" />
<property name = "vcn_name" />
<property name = "vref" />
<property name = "vcn_per" />
<property name = "vcn_no" />
<property name = "vcn_email" />
<property name = "vcn_email1" />
<property name = "vrmks" />
<property name = "vstatus" />
<property name = "vapp_id" />
<property name = "vmob_ver" />
<property name = "vchg_code" />
</class>
</hibernate-mapping>
请建议需要做什么?
使用 AddAssembly("ORM_dscnew")
导致呼叫System.Reflection.Assembly.Load("ORM_dscnew")
。在您的情况下,.NET框架无法找到您的组件并产生FileNotFoundException
。
nhibernate只需将其包裹在MappingException
中即可。根部问题是找不到组装(或它的依赖关系之一...(。Microsoft文档指出,汇编名称应该是一个长名,您的代码仅提供简单的名称,因此也许是您的问题。
无论如何,我个人喜欢通过从其中包含的类型中获取一个组件来添加一个组件。当然,这意味着您的工厂需要参考这种类型。
config.AddAssembly(typeof(ATypeInORM_dscnew).Assembly);