【问题标题】:NHibernate QueryOver Where ExistsNHibernate QueryOver 存在的地方
【发布时间】:2012-04-24 18:23:04
【问题描述】:

CUSTOMER、COMPANY 和一个关系表 CUSTOMER_COMPANY,它保持公司和客户之间的关系。

我有一个电子邮件列表

列出电子邮件列表

我想搜索属于特定公司的客户,并且他/她的电子邮件(这是一个字段)在此电子邮件列表中。如何使用 QueryOver?

public class CustomerMap : ClassMap<Customer>
{
    public CustomerMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Email);
        //... Other Fields

        HasMany(x => x.CompanyCustomers);
    }
}


public class CompanyMap : ClassMap<Company>
{
    public CompanyMap()
    {
        Id(x => x.Id);
        Map(x => x.Title);
            //... Other Fields

        HasMany(x => x.CompanyCustomers);
    }
}


public class CompanyCustomerMap : ClassMap<CompanyCustomer>
{
    public CompanyCustomerMap()
    {
        Id(x => x.Id);
        Map(x => x.IsActive);
        Map(x => x.CustomerType);
        ...

        References(x => x.Customer);
        References(x => x.Company);
    }
}

我想获取属于存在于电子邮件列表中的公司的客户...

【问题讨论】:

  • 请向我们展示您的客户和公司映射

标签: nhibernate fluent-nhibernate queryover


【解决方案1】:

你可以这样试试:

Company company = null;
session.QueryOver<Customer>
  .JoinAlias(customer => customer.Company, () => company)
  .WhereRestrictionOn(() => company.Email).IsIn(new[] { "email_1", "email_2", ... })
  .TransformUsing(Transformers.DistinctRootEntity)
  .List();

【讨论】:

  • 应该只是 .List() - 没有理由查询客户并返回公司列表,尤其是当他希望客户退出时。
  • @Fourth 当然你是对的,这是一个错误,我更正了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多