Nhibernate получить коллекцию от ICriteria - PullRequest
1 голос
/ 22 марта 2010

коллеги. У меня проблема с получением моей сущности. Отображение:

     <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
           assembly="Clients.Core"
           namespace="Clients.Core.Domains">
     <class name="Sales, Clients.Core" table='sales'>
        <id name="Id" unsaved-value="0">
          <column name="id" not-null="true"/>
          <generator class="native"/>
        </id>
        <property name="Guid">
           <column name="guid"/>
         </property>
        <set name="Accounts" table="sales_users" lazy="false">
            <key column="sales_id" />
            <element column="user_id" type="Int32" />
        </set>
     </class>

Домен:

   public class Sales : BaseDomain
   {
        ICollection<int> accounts = new List<int>();
        public virtual ICollection<int> Accounts
        {
            get { return accounts; }
            set { accounts = value; }
   }
    public Sales() { }           
   }

Я хочу получить запрос, например

SELECT * 
 FROM sales s 
 INNER JOIN sales_users su on su.sales_id=s.id 
 WHERE su.user_id=:N

Как я могу сделать это через объект ICriterion?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

Я думаю, что ответ должен быть таким:

public IEnumerable<Sales> GetSalesForUser(int userId)
{
    return session.CreateCriteria<Sales>()
        .CreateAlias("Accounts", "accounts")
        .Add(Restrictions.Eq("accounts.UserId", "userId"))
        .List<Sales>();
}

Но меня смущает ваша модель. Похоже, что Учетные записи имеют отношение многие-ко-многим с отделом продаж, но вы не отобразили это таким образом. Я не уверен, как фильтровать коллекцию int (HashSet в этом случае). Вы можете попробовать:

public IEnumerable<Sales> GetSalesForUser(int userId)
{
    return session.CreateCriteria<Sales>()
        .Add(Restrictions.Eq("Accounts", userId))
        .List<Sales>();
}
1 голос
/ 22 марта 2010
var sales = session.CreateCriteria(typeof(Sales))
                     .SetFetchMode("Accounts", FetchMode.Join)
                     .SetResultTransformer(Transformers.DistinctRootEntity)
                     .List<Sales>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...