public class Version
{
public byte Major { get; set; }
public byte Minor { get; set; }
public short Build { get; set; }
public int Revision { get; set; }
private long NumVersion
{
//get {}
//set {}
//Some logic that make Int64 number that represents this verion
}
}
Предположим, я хочу иметь возможность писать запросы вроде
Where<Product>(t=>t.Version > new Version(1,2,0,0))
В таблице Product я храню только поле Int64 NumVersion, поэтому свойство Version отображается как компонент, ив настоящее время я запрашиваю его как Where<Product>(t=>t.Version.NumVersion > new Version(1,2,0,0).NumVersion)
В C # я могу 1. Перегрузить операторы сравнения, 2. Сделать его неявно приведенным к long, например:
public static implicit operator long(Version v)
{
return v.NumVersion;
}
Это позволит мне сравнить версиюобъекты, но как заставить NHibernate понять это и генерировать правильный SQL?