Это может быть очень просто, но я думаю, что что-то упустил.У меня есть самостоятельная таблица Units
, у каждого юнита есть основной блок:
![enter image description here](https://i.stack.imgur.com/zLM6w.png)
Чтобы я мог запросить что-то вроде этого:
![enter image description here](https://i.stack.imgur.com/6B7eo.png)
Таблица units
сопоставлена со следующим классом:
public class Units
{
public virtual int Unit_Id { get; private set; }
public virtual string Unit { get; set; }
public virtual decimal Unit_Value { get; set; }
public virtual Units Main_Unit { get; set; }
}
С файлом сопоставления .hbm следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NewA.Domain" namespace="NewA.Domain">
<class name="NewA.Domain.Entities.Units,NewA.Domain" table="Units">
<id name="Unit_Id" column="Unit_Id" type="Int32" length="4" unsaved-value="0">
<generator class="native">
</generator>
</id>
<property name="Unit" column="Unit" type="string" length="50" not-null="true"/>
<one-to-one name="Main_Unit" class="NewA.Domain.Entities.Units,NewA.Domain"/>
</class>
</hibernate-mapping>
При тестировании этих объектов сследующий код:
Units unit = _UnitsRepository.GetById(2);
string parent_unitname = unit.Main_Unit.Unit;
Assert.AreEqual("pack",parent_unitname);
Я получил следующее исключение:
Expected values to be equal.
Expected Value : "pack"
Actual Value : "kg"
Проблема в том, что свойство Main_Unit
сущности Unit
ссылки на себя, так чего мне здесь не хватает ?? и как я могу написать что-то вроде рекурсивного SQL CTE для применения рангов и т. д., потому что у меня такая же проблема с другими более сложными самосоединяющимися таблицами с более сложными запросами.