此过滤器代码的工作方式符合我的要求(仅加载与当前登录客户相关的时间票据。)有两件事让我担心:
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");
}
}
Fluent / NHibernate的专家能不能告诉我这个,或者在告诉我可能不会遇到严重问题时不以为然地做鬼脸?
答案 0 :(得分: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");