Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate.MappingException:无法编译映射文档_Nhibernate_C# 4.0_.net 4.0_Nhibernate Mapping - Fatal编程技术网

NHibernate.MappingException:无法编译映射文档

NHibernate.MappingException:无法编译映射文档,nhibernate,c#-4.0,.net-4.0,nhibernate-mapping,Nhibernate,C# 4.0,.net 4.0,Nhibernate Mapping,我是NHibernate的新手。我正在尝试将此ORM与SQLite一起使用。 我有以下资料: Product.cs namespace Stock.Models.Classes { class Product { public virtual string Name {get; set;} public virtual int Id { get; set; } public virtual decimal Price { get;

我是NHibernate的新手。我正在尝试将此ORM与SQLite一起使用。 我有以下资料:

Product.cs

namespace Stock.Models.Classes
{
    class Product
    {
        public virtual string Name {get; set;}
        public virtual int Id { get; set; }
        public virtual decimal Price { get; set; }
        public virtual decimal Quantity { get; set; }
    }
}
namespace Stock
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            var cfg = new Configuration();
            cfg.Configure();
                cfg.AddAssembly(typeof(Product).Assembly);
        }
    }
}
Product.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Stock.Models"
                  namespace="Stock.Models.Classes">
  <class name="Product" table="products">
    <id name="Id">
      <generator class="int" />
    </id>
    <property name="Name" />
    <property name="Price" />
    <property name="Quantity" />
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="connection.connection_string">Data Source=nhibernate.db;Version=3</property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name="query.substitutions">true=1;false=0</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>
如果在程序.cs中添加try/catch:

 try
    {
        cfg.AddAssembly(typeof(Product).Assembly);
    }
 catch (Exception e) { Console.WriteLine(e); }
我得到(控制台):

NHibernate.dll中发生了类型为“NHibernate.MappingException”的第一次意外异常
NHibernate.MappingException:无法编译映射文档:Stock.Models.Mappings.Product.hbm.xml-->NHibernate.MappingException:持久类Stock.Models.Classes.Product,Stock.Models未找到---->System.IO.FileNotFoundException:无法加载文件或程序集“Stock.Models”或其依赖项之一。这是一个特殊的建筑系统。
在System.Reflection.RuntimeAssembly.\n加载(AssemblyName文件名、字符串代码基、证据assemblySecurity、RuntimeAssembly位置提示、StackScrawMark和stackMark、Boolean throwOnFileNotFound、Boolean For Inspection、Boolean suppressSecurityChecks)
位于System.Reflection.RuntimeAssembly.nLoad(AssemblyName文件名、字符串代码基、证据assemblySecurity、RuntimeAssemblyLocationHint、StackScrawlMark和stackMark、Boolean throwOnFileNotFound、Boolean For Inspection、Boolean suppressSecurityChecks)
位于System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据assemblySecurity,StackScrawMark&stackMark,布尔值用于内省,布尔值suppressSecurityChecks)
在System.Reflection.RuntimeAssembly.InternalLoad(字符串assemblyString、证据assemblySecurity、StackScrawMark和stackMark,布尔值用于内省)
在System.Reflection.Assembly.Load处(字符串assemblyString)
位于NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName名称,布尔throwOnError)
位于NHibernate.Util.ReflectHelper.ClassForName(字符串名)
在NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked处(String fullName,String errorMessage)
---内部异常堆栈跟踪的结束---
在NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked处(String fullName,String errorMessage)
在NHibernate.Cfg.XmlHbmBinding.Binder.ClassForNameChecked(字符串名称、映射、字符串错误消息)
位于NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(IEntityMapping类映射,PersistentClass模型,IDictionary`2 inheritedMetas)
位于NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(HbmClass类模式,IDictionary`2继承元数据)
在NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(HbmClass rootClass,IDictionary`2 inheritedMetas)
位于NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.addentiesmappings(hbmmappingmappingschema,IDictionary`2 inheritedMetas)
在NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind处(HbmMapping-mappingSchema)
在NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument,String documentFileName)中
---内部异常堆栈跟踪的结束---
位于NHibernate.Cfg.Configuration.loganthrow(异常)
在NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument,String documentFileName)中
在NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
在NHibernate.Cfg.Configuration.ProcessMappingsQueue()中
在NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument文档)中
在NHibernate.Cfg.Configuration.AddXmlReader(xmlReat)处,线程“vshost.RunParkingWindow”(0x1700)已退出,代码为0(0x0)。
线程“”(0x5d4)已退出,代码为0(0x0)。
程序“[4428]Stock.vshost.exe:Managed(v4.0.30319)”已退出,代码为0(0x0)。
程序“[4428]Stock.vshost.exe:程序跟踪”已退出,代码为0(0x0)。
der hbmReader,字符串名称)
在NHibernate.Cfg.Configuration.AddInputStream(流xmlInputStream,字符串名)
在NHibernate.Cfg.Configuration.AddResource(字符串路径,程序集)
在NHibernate.Cfg.Configuration.AddAssembly(程序集)中
位于C:\Users\Cristian\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs中的Stock.Program.Main():第25行

XML文件设置为
嵌入式资源
始终复制
。为什么不编译映射文档Stock.Models.Mappings.Product.hbm.xml?这是文件格式问题还是库dll问题?

嗯,
库存.Models
程序集不存在。唯一存在的程序集是
库存
,因此您需要相应地更改映射文件:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Stock"
                  namespace="Stock.Models.Classes">

我也有同样的问题。它位于“程序集”和“命名空间”中。我所做的是解决这个问题,在你的例子中,将两者都命名为“股票”


尽管我的映射文件是正确的,但还是出现了相同的错误

原来更新的程序集不在
C:\inetpub\wwwroot\wss\VirtualDirectories\\bin
文件夹中。当我用手把它们复制过来时,它起作用了


我还没有解释为什么它们还没有被复制,或者即使它们应该被复制,我只是将此作为一个答案发布,因为它解决了我的问题,而且我还没有在网上的任何地方看到它的文档。

您应该在hbm.xml文件中添加程序集和命名空间。for可以找到使用typeof(yourModel)的assemply名称.程序集并检查全名。
程序集和类的名称不相同。

我删除了hbm.xml文件,但仍然得到相同的错误。
A first chance exception of type 'NHibernate.MappingException' occurred in NHibernate.dll
NHibernate.MappingException: Could not compile the mapping document: Stock.Models.Mappings.Product.hbm.xml ---> NHibernate.MappingException: persistent class Stock.Models.Classes.Product, Stock.Models not found ---> System.IO.FileNotFoundException: Could not load file or assembly 'Stock.Models' or one of its dependencies. El sistema no puede encontrar el archivo especificado.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.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)
   --- End of inner exception stack trace ---
   at NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullName, String errorMessage)
   at NHibernate.Cfg.XmlHbmBinding.Binder.ClassForNameChecked(String name, Mappings mappings, String errorMessage)
   at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(IEntityMapping classMapping, PersistentClass model, IDictionary`2 inheritedMetas)
   at NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(HbmClass classSchema, IDictionary`2 inheritedMetas)
   at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(HbmClass rootClass, IDictionary`2 inheritedMetas)
   at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema, IDictionary`2 inheritedMetas)
   at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(HbmMapping mappingSchema)
   at NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName)
   --- End of inner exception stack trace ---
   at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception)
   at NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName)
   at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
   at NHibernate.Cfg.Configuration.ProcessMappingsQueue()
   at NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument document)
   at NHibernate.Cfg.Configuration.AddXmlReader(XmlReaThe thread 'vshost.RunParkingWindow' (0x1700) has exited with code 0 (0x0).
The thread '<No Name>' (0x5d4) has exited with code 0 (0x0).
The program '[4428] Stock.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).
The program '[4428] Stock.vshost.exe: Program Trace' has exited with code 0 (0x0).
der hbmReader, String name)
   at NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name)
   at NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly)
   at NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly)
   at Stock.Program.Main() in C:\Users\Cristhian\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:line 25
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Stock"
                  namespace="Stock.Models.Classes">
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                  assembly="Stock"
                  namespace="Stock">