我有一个表ExchangeRate,它有以下4个字段和关系
我创建了一个如下所示的映射文件
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateService" assembly="NHibernateService">
<class name="Entity" table="ExchangeRate" entity-name="ExchangeRate">
<id name="id" column="id">
<generator class="native" />
</id>
<dynamic-component name="Attributes">
<property name="ExchangeRate" column="ExchangeRate" type="double" />
<many-to-one name="Currency" class="Entity" entity-name="Currency" column="CurrencyFrom" lazy="false" />
<many-to-one name="Currency" class="Entity" entity-name="Currency" column="CurrencyTo" lazy="false" />
</dynamic-component>
</class>
</hibernate-mapping>
它会抛出一个错误,因为它有两个字段在同一个表中。 此方案的映射文件中需要进行哪些更改? 在此先感谢。
答案 0 :(得分:0)
问题出在name
元素的 many-to-one
属性中。简单地说,不能有两个相同的名字。它与C#中的相同,不会编译:
public class Entity
{
public virtual int id { get; set; }
public virtual Currency Currency { get; set; }
public virtual Currency Currency { get; set; } // the same name twice
public virtual double ExchangeRate { get; set; }
}
上面的映射是1:1来提供问题中的xml映射。两个属性的名称是相同的货币 ...我们必须像这样更改(在C#中):
public class Entity
{
public virtual int id { get; set; }
public virtual Currency CurrencyFrom { get; set; }
public virtual Currency CurrencyTo { get; set; } // different names
public virtual double ExchangeRate { get; set; }
}
并且必须将相同的(如上面讨论的C#实体级别)应用于映射。此外,class属性必须表示其属性类型(即货币)。
<many-to-one name="CurrencyFrom" class="Currency" column="CurrencyFrom" lazy="false" />
<many-to-one name="CurrencyTo" class="Currency" column="CurrencyTo" lazy="false" />
注意:所有人都希望,类似的方式将表 [Currency] 映射到Currency
类