У меня есть ситуация, когда у меня есть таблица с 3 столбцами, которые содержат идентификаторы, ссылающиеся на разные таблицы.В дополнение к этим 3 столбцам у меня есть несколько столбцов с некоторыми свойствами.
Допустим, что 3 столбца - это Foo, Bar, Baz.Foo никогда не является нулевым, и точно один из Bar, Baz является нулевым.
Моя сущность и отображение выглядят следующим образом (имейте в виду, что я хотел упростить ситуацию):
public class FooBarBaz
{
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public virtual Baz Baz { get; set; }
public virtual string Prop { get; set; }
public override bool Equals(Object obj)
{
/* checks for nulls etc. in the end
returns Foo == obj.Foo && Bar == obj.Bar && Baz == obj.Baz */
}
public override int GetHashCode()
{
/* builds unique string for (Foo,Bar,Baz)
taking nulls into account and gets it's hashcode */
}
}
public class FooBarBazMap : ClassMap<FooBarBaz>
{
public FooBarBazMap()
{
CompositeId()
.KeyReference(x => x.Foo, "Foo_Id")
.KeyReference(x => x.Bar, "Bar_Id")
.KeyReference(x => x.Baz, "Baz_Id");
Map(x => x.Prop);
}
}
Я создал вручную строку, в которой все три столбца не равны NULL, и это отображение работает совершенно нормально.Но моя логика приложения основана на том факте, что всегда один из двух (Bar, Baz) является нулем, и в этой ситуации NHibernate возвращает значение NULL как сущность FooBarBaz.
Как мне преодолеть эту проблему?Разрешает ли NHibernate нулевые значения в CompositeId?