2013-04-16 77 views
0

这是我第一次使用NHibernate,我从我的朋友那里得到一个程序的源代码之后,程序运行良好后,我试图添加“库存的.hbm.xml”如下:NHibernate - 无法编译映射文件

`

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        namespace="NBooks.Core.Models" 
        assembly="NBooks.Core"> 

    <class name="Stock" table="Stocks" lazy="false"> 

    <id name="ID"> 
     <column name="Stock_ID" /> 
     <generator class="identity" /> 
    </id> 

    <property name="Stock_name" column="Stock_name" /> 
    <property name="Comp_ID" column="Comp_ID" /> 
    <property name="Stock_Code" column="Stock_Code" /> 
    <property name="Address" column="Address" /> 
    <property name="Nots" column="Nots" /> 

    </class> 

</hibernate-mapping> 

`

我的同班同学 “Stock.cs”

using System; 
using System.Collections.Generic; 


namespace NBooks.Core.Models 
{ 


public class Stock : BaseModel<Stock> 
{ 

     public virtual string Stock_name { get; set; } 
     public virtual string Stock_Code { get; set; } 
     public virtual int Comp_ID { get; set; } 
     public virtual string Notes { get; set; } 
     public virtual string Address { get; set; } 
     public virtual bool Inactive { get; set; } 

     public Stock() 
     { 
     } 

     public Stock(string name) 
     { 
      this.Stock_name = name; 
     } 


} 


    public class StockEventArgs : EventArgs 
    { 

     public Stock Stock { get; set; } 

     public StockEventArgs(Stock Stock) 
     { 
      this.Stock = Stock; 
     } 
} 

    public delegate void StockEventHandler(Stock sender, EventArgs e); 

    } 

的基本模式是:

using System; 
using System.Collections.Generic; 
using NBooks.Core.Util; 
using NBooks.Data.NHibernate; 
using NHibernate; 

namespace NBooks.Core.Models 
{ 
public interface IBaseModel 
{ 
    int Id { get; set; } 
} 

public class BaseModel<T> : IBaseModel 
{ 
    IList<string> errors = new List<string>(); 
    public virtual int Id { get; set; } 

    public virtual bool HasErrors { 
     get { return errors.Count > 0; } 
    } 

    public virtual IList<string> Errors { 
     get { return errors; } 
    } 

    public BaseModel() 
    { 
    } 

    public virtual void Validate() 
    { 
     Errors.Clear(); 
    } 

    public virtual void SaveOrUpdate() 
    { 
     ITransaction trans = null; 
     try { 
      ISession session = NHibernateHelper.OpenSession(); 
      trans = session.BeginTransaction(); 
      session.SaveOrUpdate(this); 
      session.Flush(); 
      trans.Commit(); 
     } catch (Exception ex) { 
      LoggingService.Error(ex.Message); 
      MessageService.ShowError(ex.Message); 
      trans.Rollback(); 
     } 
    } 

    public virtual void Delete() 
    { 
     ITransaction trans = null; 
     try { 
      ISession session = NHibernateHelper.OpenSession(); 
      trans = session.BeginTransaction(); 
      session.Delete(this); 
      session.Flush(); 
      trans.Commit(); 
     } catch (Exception ex) { 
      LoggingService.Error(ex.Message); 
      MessageService.ShowError(ex.Message); 
      trans.Rollback(); 
     } 
    } 

    public static T Read(int id) 
    { 
     return NHibernateHelper.OpenSession().Load<T>(id); 
    } 

    public static IList<T> FindAll() 
    { 
     return  
NHibernateHelper.OpenSession().CreateCriteria(typeof(T)).List<T>(); 
    } 
} 
} 

当建立它appers每一件事情都很好,没有任何错误,运行时错误“NHibernate的 - 无法编译映射文件Stock.hbm.xml “出现。 Thanx提前

+1

虽然我不认为这是你的错误为name =“ID”应该是名称=“ID”。 ? – Rippo

+1

检查内部异常。 – cremor

回答

1

我注意到你在你的XML有一个错字:

<property name="Nots" column="Nots" /> 

我会建议你看看使用Fluent NHibernate也是如此。它是强类型的(大部分),映射文件更容易阅读和使用lambda表达式,所以你不必去XML路由。

你映射反而会是这样的:

public class StockMap(): ClassMap<Stock> 
{ 
    public StockMap(){ 
     Id(x => x.Id).Column("Stock_ID").GeneratedBy.Identity(); 
     Map(x => x.Comp_ID); 
     Map(x => x.Address); 
     Map(x => x.Notes); 
    } 
} 
1

你有一个错字在映射

<property name="Nots" column="Nots" /> 

应该

<property name="Notes" column="Nots" />