流利的NHibernate行级安全实施 - 太粗略了?
问题描述:
该过滤器的代码工作我如何想两件事情让我担心这件事(与客户当前登录只加载一次票。):流利的NHibernate行级安全实施 - 太粗略了?
- 添加
collate Latin1_General_CI_AS
列名。我读过NHibernate不支持加入多个排序规则的其他地方,所以我很关心那些意想不到的副作用。 -
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");