2011-03-30 41 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