我对NHibernate很新,所以这可能相当微不足道,但搜索让我感到困惑。
我有一个AddOnAmount
表格如下:
AddOnID | AddOnTypeID | Period | Amount
其中AddOnTypeID
是FK。这些行在AddOnTypeID
和Period
上具有唯一约束。
映射如下所示:
<id name="Id" column="AddOnId" type="long">
<generator class="native" />
</id>
<many-to-one name="AddOnType" column="AddOnTypeID" class="AddOnTypeStatic" not-null="true" />
<property name="Period" />
etc.
AddOnTypeStatic
类/表只有一个Id
,它是存储在表格中的数值,还有一个描述性的Name
。
我正在尝试编写一个将按AddOnTypeId
和Period
搜索的查询,因此我可以在尝试从前端添加副本之前验证行的存在(或不存在) ,但我不知道如何做到这一点,因为AddOnAmountStatic
类有一个子类,而表只有一个Id。
到目前为止我写过:
public AddOnAmountStatic FindByAddOnTypeAndPeriod(long addOnType, string period)
{
return FindOne(CreateCriteria()
.Add(Restrictions.Eq("AddOnTypeId", addOnType))
.Add(Restrictions.Eq("Period", period))
.SetCacheable(true));
}
不起作用,因为AddOnTypeId
不是AddOnAmountStatic
的属性。不确定如何在此上下文中访问子类的属性。
我的绘图工作正常,因为到目前为止我一直在使用它而没有任何问题。
答案 0 :(得分:0)
解决了我的问题 - 很简单,但我认为我会在这里添加解决方案,以防它帮助其他人。
我一直在考虑从表的角度构建查询(即使用AddOnTypeID
),而我应该做的是从实体的角度来看它。换句话说,我只需要传入一个AddOnTypeStatic
对象。
我所做的是获取AddOnTypeID
参数,通过NHibernate检查 it (返回AddOnTypeStatic
对象或null)然后将其传递给原始查询。最终查询只是
return FindOne(CreateCriteria()
.Add(Restrictions.Eq("AddOnType", addOnType))
.(Restrictions.Eq("Period", period))
.SetCacheable(true));
希望这有助于另一个新手!