在Join列上使用流畅的Nhibernate ApplyFilter

Jai*_*ime 5 mapping join fluent-nhibernate

我正在尝试在另一个表的Join(和投影)列上应用过滤器(ApplyFilter).我有以下实体:

public class User
{
    public virtual int Id { get; private set; }
    public virtual string EMail { get; set; }
    ...
    public virtual bool IsActive { get; set; }
    public virtual int CompanyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用UserMap:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("Users");
        Id(x => x.Id, "UserId");
        Map(x => x.EMail);
        ...

        Join("CompanyUser", r =>
        {
            r.KeyColumn("UserId");
            r.Map(x => x.IsActive);
            r.Map(x => x.CompanyId);
            r.Fetch.Join();

        });

        ApplyFilter<CompanyFilter>("this_1_.CompanyId = :companyId");
    }
Run Code Online (Sandbox Code Playgroud)

这实际上现在正常工作,但正如您所看到的,我必须在过滤器中为CompanyUser表包含别名"this_1_"...这听起来不正确,但如果我按照定义的那样保留过滤器FilterDefinition类我得到一个带有以下内容的Sql:

where this.CompanyId = ?p0
Run Code Online (Sandbox Code Playgroud)

未映射'cos CompanyId列来自不同的投影(CompanyUser as this_1_)

有没有办法纠正这个问题,让nhibernate找出过滤器的正确别名?

在此先感谢您的帮助.

Bru*_*pes 0

我认为你必须在连接上应用过滤器:

    Join("CompanyUser", r =>
    {
        r.KeyColumn("UserId");
        r.Map(x => x.IsActive);
        r.Map(x => x.CompanyId);
        r.Fetch.Join();

    }).ApplyFilter<CompanyFilter>("CompanyId = :companyId");
Run Code Online (Sandbox Code Playgroud)