流利的NHibernate行级安全实施 - 太粗略了?

问题描述:

该过滤器的代码工作我如何想两件事情让我担心这件事(与客户当前登录只加载一次票。):流利的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"); 
     } 
    } 

可以用流利/ NHibernate的专家要么说服我离开这里,或扮鬼脸不以为然,同时告诉我,我可能不会遇到严重的问题?

我最终加入排序规则的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");