2

是否可以向实体中的派生字段添加限制,即。一个不坚持的?例如,如果这是我的实体:

public class Employee 
{
    public long Id { get; set; }
    public string Forename { get; set; }
    public string Surname {get; set; }
    public string FullName { get { return Forename + " " + Surname; }}
}

这是映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               namespace="Domain.Entities"
               assembly="Domain">
  <class name="Employee" table="`Employee`">
    <id name="Id" column="Id" type="long">
      <generator class="identity"/>
    </id>
    <property name="Forename"/>
    <property name="Surname"/>
  </class>
</hibernate-mapping>

这是我的查询:

public Employee GetByFullName(string fullName)
{
    return _session
        .CreateCriteria<Employee>
        .Add(Restrictions.Eq("FullName", fullName))
        .List<Employee>();
}

请忽略我可以自己编写查询的事实,这是一个简单的示例来演示。这在更复杂的场景中会很有用。

4

2 回答 2

4

这取决于,基本上如果您可以使用 SQL 复制派生字段,那么它可以完成(所以基本上可以完成,但它的实用性会有所不同)。在您的示例中,您需要映射您的 Fullname 属性,例如:

<property name="Fullname" formula="Forename + ' ' + Surname"/>

然后要阻止 NHibernate 抱怨,您需要为 Fullname 定义一个空设置器:

public virtual string Fullname {
    get { return Forename + " " + Surname; }
    set { } // do nothing
}

然后你就可以查询 Fullname 并且 NHibernate 会正确地将公式插入到 sql 中。

于 2012-10-01T15:03:18.073 回答
1

不。Hibernate / NHibernate 中的查询总是被翻译成 SQL。如果该字段不在数据库中,则无法查询。

于 2012-10-01T13:52:03.483 回答