Это означает, что вы хотите, чтобы все точки, имеющие координаты (1, 1, 1), рассматривались только как одна. Несмотря на то, что это не поощряется в рамках практики NHibernate, вы можете сделать это с помощью составных идентификаторов.
Перейдя по этой ссылке: Глава 7. Сопоставление компонентов , а вы прокрутите вниз до 7.4, где объясняется составной идентификатор. Тогда ваше отображение должно выглядеть так:
<class="Point" tables="POINTS">
<composite-id name="CompId" class="PointCoord">
<key-property name="X" type="System.Double">
<key-property name="Y" type="System.Double">
<key-property name="Z" type="System.Double">
</composite-id>
<property name="Id" type="System.Guid">
</class>
И твой класс должен был бы быть разделен следующим образом:
public class PointCoord {
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}
public class Point : PointCoord {
public Guid Id { get; set; }
}
Поступая таким образом, вам не нужно будет сохранять свой Guid в качестве идентификатора вашего класса, поскольку он больше не является идентификатором. Теперь ваш идентификатор - это ваши координаты X, Y и Z. Затем вам необходимо переопределить метод Equals () соответственно:
public override bool Equals(object obj) {
if (obj == null)
return false;
if (((Point)obj) == null)
return false;
Point p = (Point)obj;
return this.X == p.X && this.Y == p.Y && this.Z == p.Z
}
Между прочим, всегда полезно иметь перегрузку этого метода, принимая ваш тип класса в качестве входного параметра, это дает лучшую производительность:
public bool Equals(Point pt) {
if (pt == null)
return false;
return this.X == pt.X && this.Y == pt.Y && this.Z == pt.Z
}
Однако это обычно не считается хорошей практикой, и NHibernate настоятельно рекомендует, чтобы каждая таблица имела свой собственный идентификатор базы данных, и этот идентификатор не должен быть значимым значением домена, таким как, например, номер счета. У вас будет номер счета и идентификатор вашей БД. Этот составной идентификатор сохранен для совместимости с устаревшими версиями.