2011-03-30 43 views
0

我有兩個類:NHibernate的怪異DuplicateMappingException

namespace fm.web 
{ 
    public class User 
    { 
    public static string default_username = "guest"; 
    public static string default_password = "guest"; 

    private UserType usertype; 

    public virtual int? Id { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string Password { get; set; } 
    public virtual DateTime Datecreated { get; set; } 
    public virtual string Firstname { get; set; } 
    public virtual string Lastname { get; set; } 
    public virtual string Email { get; set; } 
    public virtual UserType Usertype 
    { 
     get { return usertype; } 
     set { usertype = value; } 
    }  
    } 
} 

namespace fm.web 
{ 
    public class UserType 
    { 
     public virtual int? Id { get; set; } 
     public virtual string Title { get; set; } 
    } 
} 

以下是映射文件

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        namespace="fm.web" 
        assembly="fm.web"> 
    <class name="User" table="[user]"> 
    <id name="Id"> 
     <column name="id" /> 
     <generator class="native" /> 
    </id> 
    <property name="Username" /> 
    <property name="Password" /> 
    <property name="Datecreated" /> 
    <many-to-one name="Usertype" 
       class="UserType" 
       column="[type]" 
       cascade="all" 
       lazy="false" 
       /> 
    <property name="Firstname" /> 
    <property name="Lastname" /> 
    <property name="Email" /> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        namespace="fm.web" 
        assembly="fm.web"> 
    <class name="UserType" table="[user_type]"> 
    <id name="Id"> 
     <column name="id" /> 
     <generator class="native" /> 
    </id> 
    <property name="Title" /> 
    </class> 

</hibernate-mapping> 

我得到一個異常:DuplicateMappingException

無法編譯映射文件:FM .web.data.User.hbm.xml

重複的類/實體映射用戶

nhibernate總是這麼難嗎?也許我需要一個不同的框架。

+1

我將你的類和HBM文件複製到一個新的NH項目中。我能夠創建模式並將用戶/ usertype保存到數據庫中。你可以顯示你的NH配置代碼嗎?您使用的是哪個版本的NH?還要確保您的hbm.xml文件設置爲嵌入式資源。 – 2011-03-30 22:03:51

回答

0

我真的認爲映射很好,這使我相信配置設置不太正確。

請您檢查BuildSessionFactory只在應用程序啓動時調用一次。 也請檢查你是否沒有包含映射文件兩次,因爲這也會引發這種類型的錯誤。

請張貼您的配置代碼。

你認爲NHibernate很難掌握新手特別是會話管理和映射。一旦你掌握了這一點,事情會變得更容易,並且非常值得努力。

+0

這裏的配置:'<配置> <段名= 「休眠配置」 類型= 「NHibernate.Cfg.ConfigurationSectionHandler,NHibernate的」 /> <冬眠配置的xmlns = 「甕:NHibernate的配置-2.2」> '' – 2011-03-31 20:54:46

+0

<會話工廠>
<屬性名= 「connection.provider」> NHibernate.Connection.DriverConnectionProvider
<屬性名= 「方言」> NHibernate.Dialect.MsSql2005Dialect
NHibernate.Driver.SqlClientDriver
Data Source = eiosdb8.si-eios.com,2433; Initial Catalog = fm; User Id = ********; Password = ********;


2011-03-31 20:57:45

+0

您是否逐行通過代碼來確保BuildSessionFactory只被調用一次? – Rippo 2011-04-01 08:02:19