---
title: "nhibernate klass + top 1 relaterad klass"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/181827-nhibernate-klass-top-1-relaterad-klass"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "doggelito"
published: "2009-12-29T12:29:09.000Z"
updated: "2010-01-11T22:07:03.000Z"
replies: 3
views: 549
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/181827-nhibernate-klass-top-1-relaterad-klass"
---

# nhibernate klass + top 1 relaterad klass

## #1 — doggelito, 2009-12-29T12:29Z

Tjena, 
Jag har en "huvudklass" som har en one-to-many relation till en "underklass".
Till detta skulle jag i mappningen kunna göra en *bag* i huvudklassen som håller alla underklasser och sedan för att hämta ett värde skriva: 

```
ImprovementStatus status = Improvement.Statuses[0];
```

Inga konstigheter där!

Nu är det så att en bag, eller samling, är helt ointressant att hämta upp, varför underklassen kan innehålla flera rader är bara för att få en historik.
Det enda (i nuläget kan väl tilläggas) som är intressant är att hämta ut den senaste radern ur underklassen dvs. select max(Underklass). 
Så, är det möjligt att skapa en property alt. annan typ av mappning som hämtar senaste underklassen för att slippa en *bag*?
Så att jag kan skriva:

```
ImprovementStatus status = Improvement.Status;
```

Typ nått sånt här:

```
<class name="Improvement, DomainObjects" table="Improvements">
    <id name="ID" column="ImprovementID" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>
    <property name="Status" formula="(select max(Status) )" />
</class>
<class name="ImprovementStatus, DomainObjects" table="ImprovementStatuses">
    <id name="ID" column="StatusID" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>
    <many-to-one name="Improvement" class="Improvement, DomainObjects" column="ImprovementID" fetch="join" />
    <property name="Status" column="Status" type="int"/>
  </class>
```

Eller:

```
<class name="Improvement, DomainObjects" table="Improvements">
    <id name="ID" column="ImprovementID" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>
    <many-to-one name="Status" class="ImprovementStatus, DomainObjects" formula="(select max(Status) )" />
</class>

<class name="ImprovementStatus, DomainObjects" table="ImprovementStatuses">
    <id name="ID" column="StatusID" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>
    <many-to-one name="Improvement" class="Improvement, DomainObjects" column="ImprovementID" fetch="join" />
    <property name="Status" column="Status" type="int"/>
  </class>
```

Jga har testat olika varianter att köra en formula i many-to-one, jag får inget felmeddelande där men heller inte rätt värden.
Enligt dokumentationen är inte formula implementerat i many-to-one men den genererar inte fel så...?!

Permalänk: https://www.webforum.nu/p/181827

## #2 — Nickemannen, 2009-12-29T14:17Z

Måste du ha det i entiteten kan du inte ha en service som gör det åt dig?

Permalänk: https://www.webforum.nu/p/2218443

## #3 — doggelito, 2009-12-29T15:00Z

Jag måste inte ha den i entiteten men jag tycker dock att det är smidigt, även om det blir lite overload i selectsatserna att använda formulas i mappningarna! :)
Jag har sett andra som sätter formula, inte bara i property-fält, utan även i relationer, men det verkar vara för Hibernate och inte NHibernate. Det kanske är under utveckling med en portning?!

Permalänk: https://www.webforum.nu/p/2218449

## #4 — KennyEliasson, 2010-01-11T22:07Z

En annan, inte allt för snygg lösning, är att mappa din bag till en privat variabel och sedan ha en property som returnerar den första. Då döljer du iallafall listan för konsumenter av ditt API.

Permalänk: https://www.webforum.nu/p/2222598

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/181827-nhibernate-klass-top-1-relaterad-klass
