Критерии с ошибкой составного идентификатора - PullRequest
0 голосов
/ 20 июля 2011

NHibernate.У меня есть 3 таблицы:

Сотрудник { PK: EmployeeId , Имя, Фамилия, ...}

Проект { PK: ProjectId , дата, name, ...}

EmployeebyProject { PK: FK: EmployeeId, ProjectId , date, ...}

Мне нужно сделать CRUD, на данный моментУ меня есть несколько записей в таблице EmployeebyProject.Поэтому я пытаюсь достать кого-нибудь из этих записей.Это метод, использующий критерии, но произошла ошибка: «GenericADOException, не удалось выполнить запрос», «Column EmployeeId is not valid», «Column ProductId not valid». Проблема с этим критерием не в том, чтобы перейти к таблицам Employee и Project, чтобы сделать запрос для idEmployee и idProject. Так, как я могу сделать это ??.

 public EmployeebyProject GetEmployeebyProjectByIdEmployee(int idEmployee, int idProject)
        {
            using (ISession session = NHibernateSessionBuilder.OpenSession())
            {
                var employeebyProject = session
                        .CreateCriteria(typeof(EmployeebyProject))
                        .CreateCriteria("Employee", "Employee")
                        .Add(Restrictions.Eq("EmployeeId", idEmployee))
                        .UniqueResult<EmployeebyProject>();
                return employeebyProject;
            }
        }

этоотображение для EmployeebyProject:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="AdminProject"
                   namespace="AdminProject.Business.Entity">

  <class name="EmployeebyProject">

    <composite-id>
      <key-many-to-one name="Employee" column="EmployeeId"  class="Employee"></key-many-to-one>
      <key-many-to-one name="Project" column="ProjectId"  class="Project" ></key-many-to-one>
    </composite-id> 

    <property name="DateBegin" type="DateTime"/>
    <property name="DateEnd" type="DateTime"/>

  </class>

</hibernate-mapping>

1 Ответ

0 голосов
/ 21 июля 2011

свойство EmployeeId, из которого вы вызываете .Add(Restrictions.Eq("EmployeeId", idEmployee)), неверно, EmployeeId не принадлежит сущности EmployeeProject. Он принадлежит сотруднику организации. Таким образом, ваш запрос должен быть переписан как

    public EmployeebyProject GetEmployeebyProjectByIdEmployee(int idEmployee, int idProject)
    {
        using (ISession session = NHibernateSessionBuilder.OpenSession())
        {
            var employeebyProject = session
                    .CreateCriteria(typeof(EmployeebyProject))
                    .CreateCriteria("Employee", "EmployeeAl")
                    .CreateCriteria("Project", "ProjectAl")
                    .Add(Restrictions.Eq("EmployeeAl.id", idEmployee))
                    .Add(Restrictions.Eq("ProjectAl.id", idProject))
                    .UniqueResult<EmployeebyProject>();
            return employeebyProject;
        }
    }

и я думаю, что вместо .CreateCriteria("Employee", "EmployeeAl") вы должны назвать .CreateAlias("Employee", "EmployeeAl") и то же самое для проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...