저는 Project와 Customer Model을 가지고 있습니다. 프로젝트 모델에 <many-to-one>
mapping.in 데이터베이스가있는 고객 개체가 있습니다. 고객이 있지만 프로젝트 테이블에 항목이없는 경우 일 수 있습니다.NHibernate.SqlCommand.JoinType.RightOuterJoin을 사용하는 방법?
고객이 프로젝트 또는 고객 이름을 입력 할 수있는 CustomerSearch 기능을 수행하고 있습니다. 사용자가 customname을 입력 한 경우에만 고객에게 프로젝트가 있는지 고려하지 않고 CustomerName과 일치하는 모든 레코드를 원합니다.
나는 서비스에서 이것을 시도했다.
ICriteria criteria = session.CreateCriteria(typeof(Project),"Project")
.CreateAlias("Project.customer","customer",NHibernate.SqlCommand.JoinType.RightOuterJoin)
.CreateAlias("Project.Coordinator", "Coordinator", NHibernate.SqlCommand.JoinType.InnerJoin);
if (!string.IsNullOrEmpty(custName))
{
criteria.Add(Expression.Like("customer.Name", custName, MatchMode.Start));
}
if (!string.IsNullOrEmpty(projectName))
{
criteria.Add(Expression.Like("Project.Name", projectName, MatchMode.Start));
}
projectList = criteria.List<Project>().ToList();
프로젝트 테이블에 고객 레코드가 없지만 고객 테이블에 해당 레코드가 있어야하기 때문에 고객에게 RightOuterJoin을 사용했습니다.
이 코드는 projectList
이 목록에 있지만 프로젝트 테이블에 레코드가없는 일부 항목이 null 인 경우에도 오류를주지 않습니다.
어떻게 그러한 기록을 얻을 수 있습니까?
답해 주셔서 감사합니다. NH가 null 프로젝트로 무엇을해야하는지 알 수 있도록 값을 어떤 객체에 투영하는 방법을 알려줄 수 있습니까? 이것은 많은 도움이 될 것입니다. – Amogh
코드를 추가했습니다. 이제는 항상 유효한 객체를 다시 얻습니다. ProjectId와 ProjectName이 비어있을 수도 있습니다. – Firo
ProjectId, ProjectName, CustomerName, CustomerId와 같은 별도의 속성을 가져야합니다. 프로젝트와 고객을 대상으로 삼을 수는 없습니까? – Amogh