Nhibernate-遵守分离的标准(asp.net mvc 1和Nhibernate 2)c#
好的,我找不到一个很好的例子,所以我可以更好地理解如何使用分离的标准(假设这是我首先要使用的) 我有两张桌子。 就业和就业主管 我的PlacementSupervisor表有一个与Placement.PlacementID相关的PlacementID的FK-尽管我的nhibernate模型类有PlacementSupervisor。放置(而不是专门指定放置ID的属性-不确定这是否重要) 我想做的是-如果通过了主管ID的值,我想用该主管ID限制放置 已尝试:Nhibernate-遵守分离的标准(asp.net mvc 1和Nhibernate 2)c#,c#,nhibernate,nhibernate-criteria,C#,Nhibernate,Nhibernate Criteria,好的,我找不到一个很好的例子,所以我可以更好地理解如何使用分离的标准(假设这是我首先要使用的) 我有两张桌子。 就业和就业主管 我的PlacementSupervisor表有一个与Placement.PlacementID相关的PlacementID的FK-尽管我的nhibernate模型类有PlacementSupervisor。放置(而不是专门指定放置ID的属性-不确定这是否重要) 我想做的是-如果通过了主管ID的值,我想用该主管ID限制放置 已尝试: ICriteria query = m
ICriteria query = m_PlacementRepository.QueryAlias("p")
....
if (criteria.SupervisorId > 0 && !string.IsNullOrEmpty(criteria.SupervisorTypeId))
{
DetachedCriteria entityQuery = DetachedCriteria.For<PlacementSupervisor>("sup")
.Add(Restrictions.And(
Restrictions.Eq("sup.supervisorId", criteria.SupervisorId),
Restrictions.Eq("sup.supervisorTypeId", criteria.SupervisorTypeId)
))
.SetProjection(Projections.ProjectionList()
.AddPropertyAlias("Placement.PlacementId", "PlacementId")
);
query.Add(Subqueries.PropertyIn("p.PlacementId", entityQuery));
}
ICriteria query=m_PlacementRepository.QueryAlias(“p”)
....
if(criteria.SupervisorId>0&!string.IsNullOrEmpty(criteria.SupervisorTypeId))
{
DetachedCriteria entityQuery=DetachedCriteria.For(“sup”)
.添加(限制)和(
限制条件.Eq(“sup.supervisorId”,criteria.supervisorId),
Restrictions.Eq(“sup.supervisorTypeId”,criteria.supervisorTypeId)
))
.SetProjection(Projections.ProjectionList()项目)
.AddPropertyAlias(“Placement.PlacementId”、“PlacementId”)
);
Add(subquerys.PropertyIn(“p.PlacementId”,entityQuery));
}
这就给了我一个错误:
找不到符合以下条件的信息提供程序:(sup.supervisorId=5和sup.supervisorTypeId=U)
首先,supervisorTypeId是一个字符串。
其次,我不知道如何实现我正在尝试的目标,我只是尝试了各种投影、属性别名和子查询选项的组合。因为我不知道当FK键位于第二个表中时,我应该如何连接到另一个表/实体
有人能给我指一下正确的方向吗。从数据的角度来看,这似乎是一件很容易做到的事情,希望我只是错过了一些显而易见的事情
通常,如果您不想在会话中立即使用DeteacheCriterias,那么您可以使用DeteacheCriterias,因此听起来您并不真正需要它
上面的链接(第13.4节)给出了一个示例(我已对其进行了修改,以符合您的条款):
其他一些注意事项:
我最终能够使用上面修改过的代码
query.CreateCriteria("Supervisors")
.Add(Restrictions.Eq("SupervisorId", (int)criteria.SupervisorId))
.Add(Restrictions.Eq("SupervisorType.SupervisorTypeId", criteria.SupervisorTypeId));
在我的实习示范班上,导师是我的财产
还请注意,由于受到限制,表达式已被半弃用。能否显示您的数据库模型、对象和映射?
query.CreateCriteria("Supervisors")
.Add(Restrictions.Eq("SupervisorId", (int)criteria.SupervisorId))
.Add(Restrictions.Eq("SupervisorType.SupervisorTypeId", criteria.SupervisorTypeId));