nHibernate - Samo ID w modelu i klucz obcy

0

Cześć, teoretycznie prosta sprawa. Mam dwie tabelki:

Users (Id, Name)
Limits (Id, UserId, LimitType)

Mam też taki model dla Limits:

public class Limit
{
    public Guid Id {get;set;}
    public Guid UserId {get;set;}
    public int LimitType {get;set;}
}

Tak w uproszczeniu.

Teraz bym chciał to tak zmapować, żeby działało :)
Tzn. w klasie Limit nie potrzebuję żadnych informacji o użytkowniku (poza ID). W klasie Users nie potrzebuję żadnych informacji o Limitach.
Chciałbym też, żeby UserId w tabeli Limits było kluczem obcym do tabeli Users, że jak usunę użytkownika, to limity też się usuną. Jednak za cholerę nie mogę tego ogarnąć. Szukam też w necie i nie znalazłem żadnego rozwiązania. Czy nHibernate nie potrafi zrobić tak banalnej rzeczy?

0

Ostatnio nHibernate używałem kilka lat temu więc może coś się zmieniło w tym ORMie, ale zwykły nHibernate miał pliki konfiguracyjne osobno w plikach xml, w których definiowało się mapowanie właściwości na atrybuty klucze obce etc. Generalnie operowanie na tych plikach to była masakra i do obsługi nHibernate wykorzystuje się interfejs fluent - dodatkowa biblioteka, która umożliwia tworzyć takie mapping classes. Poniżej link. Tutaj za pomocą wygodnych instrukcji możesz sobie określić mapowania na określone typy w bazie danych, czy określić co jest kluczem obcym do jakiej tabeli i ustawić kaskadową strategię usuwania/edycji danych, która Ciebie interesuje.

https://github.com/FluentNHibernate/fluent-nhibernate/wiki/fluent-mapping

0

Przyznam szczerze, że nie wiem czy da się w ogóle mapować tylko i wyłącznie z wykorzystaniem samego id musisz mieć jednak obiekt klasy w swoim modelu. Niemniej NHibernate domyślnie wykorzystuje Lazy Loading, więc ten obiekt będzie posiadał tylko i wyłącznie id. Wówczas mapowanie powinno wyglądać mniej więcej tak:

class LimitsMap : ClassMap< Limits>
{
        public LimitsMap()
        {
            Id(x => x.Id);
            Map(x => x.LimitType);
            References(x => x.User).ForeignKey("FK_LimitsUsers").Cascade.All();
        }
 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1