У меня есть класс с двумя вычисляемыми столбцами. Формулы - это операторы select, которые получают значения из других таблиц, например:
private const string VOTES_FORMULA = "(select count(v.id) from Votes v where v.BusinessID = Id)";
private const string SURVEY_FORMULA = "(select cast((case when exists (select * from surveys s where s.businessid = Id) then 1 else 0 end) as bit))";
// in my bootstrap code...
mappings.Override<Business>(map =>
{
map.IgnoreProperty(x => x.IsNewRecord);
map.IgnoreProperty(x => x.IdString);
map.Map(x => x.UserPassword).CustomType<EncryptedStringType>();
map.Map(x => x.HasTakenSurvey).Formula(SURVEY_FORMULA).Not.Insert().Not.Update();
map.Map(x => x.Votes).Formula(VOTES_FORMULA).Not.Insert().Not.Update();
});
Это все работало нормально с Fluent NHibernate 1.1 (с использованием NHibernate 2.1), но я только что обновился до 1.2 (с использованием NH 3.1), и кажется, что Fluent NHibernate игнорирует формулы. Я получаю исключение «недопустимое имя столбца» для двух полей HasTakenSurvey и Votes, потому что оно «пытается запросить столбцы напрямую, а не выполняет формулы, как указано». Пример запроса:
exec sp_executesql N'select TOP (@ p0) business0_.Id в качестве Id0_, business0_.UserPassword в качестве UserPass2_0_, business0_.HasTakenSurvey как HasTaken3_0_, business0_.Totes как Votes0_, business0__00_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0 .BusinessName как Business7_0_, business0_.BusinessType как Business8_0_, business0_.BusinessImageUrl как Business9_0_, business0_.BusinessDescription как Busines10_0_, business0_.EmployeeCount как Employe11_0_, business0_.OwnerFirstName_OWO0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0__0 as Busines15_0_, business0_.BusinessAddress2 as Busines16_0_, business0_.BusinessCity as Busines17_0_, business0_.BusinessState as Busines18_0_, business0_.BusinessPostal as Busines19_0_, business0_.BusinessCountry в виде Busines20_0_ user_0_0_0ser_040 , business0 _.UserIpAddress as UserIpA24_0_, business0_.OptInReminders как OptInRe25_0_, business0_.OptInOffers как OptInOf26_0_, business0_.OptInSms как OptInSms0_, business0_.Created как созданный 0, business0_0_BusinessBedized. @ p0 int ', @ p0 = 25
Изменилась ли реализация? Что я делаю не так?