1
我有两个实体类型:如何引用nhibernate公式映射规范中的枚举值?
- RunContainer父实体类型
- 运行子实体类型
运行有一个属性状态,其类型为RunStatus的,就像这样:
public enum RunStatus
{
Created,
Starting,
// ...
}
public class Run
{
public int ContainerId { get; private set; }
// ...
public RunStatus Status { get; private set; }
}
RunContainer具有计算属性ActiveRunCount,如下所示:
public class RunContainer
{
public int Id { get; private set; }
// ...
public int ActiveRunCount { get; private set; }
}
在用于RunContainer.ActiveRunCount
属性的映射中,我使用公式规范像这样:
<property name="ActiveRunCount" formula="(select count(r.Id) from Run r where r.ContainerId = Id and r.Status = 1)"/>
我的问题是我指的是RunStatus枚举值式中的由它们各自的数字值,而不是适当的符号名称。任何人都可以告诉我如何使用符号名称?
谢谢。
嗨。我们的模式是手动创建的,所以这个字段是一个smallint。但是,假设它是一个字符串。 NHibernate是否验证给定的字符串实际上表示来自各自枚举类型的现有值? – mark 2010-04-07 06:50:15
如果数据库列中的字符串与枚举中的值不匹配,则NHibernate会引发异常。然而,该公式是一个SQL语句,并未以此方式进行验证 - nhibernate只会将该语句复制到生成的SQL中。如果你想确保你有一个有效的字符串,你应该使用其他映射方式来生成映射XML,比如流畅映射。通过流畅的映射,您可以使用代码来定义映射。我会在我的答案中添加一个例子。 – 2010-04-07 07:28:07
谢谢。这太糟糕了,核心NHibernate不允许这样做。 – mark 2010-04-08 08:41:27