2011-01-21 3 views
0

Этот фильтр код работает так, как я хочу, чтобы две вещи беспокоят меня об этом (загружает только время билеты, связанные с вошедшего в клиента.):Свободная реализация безопасности уровня уровня NHibernate - слишком скептично?

  1. Добавление collate Latin1_General_CI_AS к имени столбца. Я читал другие места. NHibernate не поддерживает объединение нескольких сопоставлений, поэтому меня беспокоит, какие непреднамеренные побочные эффекты.
  2. this_1_: Будет ли я всегда быть в состоянии полагаться на используемый псевдоним таблицы?

public class TimeTicketMap : ClassMap<TimeTicket> 
    { 
     public TimeTicketMap() 
     { 
      Id(x => x.TicketID).GeneratedBy.Identity(); 
      Join("CONTRACTS", x => 
            { 
           x.KeyColumn("CONTRACT collate Latin1_General_CI_AS"); 
           Id(y => y.JobNumber).Column("Job"); 
           x.Map(y => y.Customer); 
          }); 
      ApplyFilter<CustomerFilter>("this_1_.Customer = :customer"); 
     } 
    } 

Может ли специалист в Fluent NHibernate/либо отговорить меня от этого, или гримасы неодобрительно, рассказывая мне, что я, вероятно, не будет работать с серьезными проблемами?

ответ

0

я в конечном итоге добавив сверку к Sql диалекте, поэтому он не будет лечиться в качестве колонки, и используя существует фильтр (менее эффективный, но я знаю, что могу положиться на него.)

public class CustomSqlDialect : MsSql2005Dialect 
{ 
    public CustomSqlDialect() 
    { 
     RegisterKeyword("Latin1_General_CI_AS"); 
    } 
} 

с

mapping.ApplyFilter<CustomerFilter> 
    (@"exists (SELECT cont.CUSTOMER FROM CONTRACTS cont 
       WHERE cont.CUSTOMER = :customer 
       AND Job COLLATE SQL_Latin1_General_CI_AS = cont.CONTRACT"); 
Смежные вопросы