Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Nhibernate: Generisk länkning?

Postades av 2009-08-06 13:20:16 - Jonas Sjöblom, i forum c# (c-sharp), Tråden har 5 Kommentarer och lästs av 935 personer

Hej på er,
jag har en basklass som jag kallar Base och flera olika klasser som ska länka till denna (eller ärva den, spelar ingen roll).

Nu är det ju inte så svårt att mappa en child-klass till Basklassen i NHibernate, jag skapar bara en many-to-one relation.

Men hur mappar jag från basklassen till korrekt child-klass? Är det ens möjligt?

Exempel:
Base<T>:
int Id
string Name
string Type
T item

Childclass:
Id
Base<Childclass> Base
[other non-relevant info]

Flera child-klasser ska inte kunna länka till en och samma Base utan det ska alltså finnas en Base per child. Det finns dock flera olika typer av childklasser.

Problemet är att jag inte kan veta typen på item innan jag laddat Base-objektet men jag kan inte ladda base objektet utan att veta typen?


Svara

Sv: Nhibernate: Generisk länkning?

Postades av 2009-08-07 10:27:59 - Peter Hageus

Det har ju egentligen inte med NHibernate att göra. Du får exakt samma problematik när du ska instansera ett nytt objekt, och du inte i förväg vet typen på item. Jag hade nog tänkt om designen och haft en basklass/interface för item eller något ditåt.


Svara

Sv:Nhibernate: Generisk länkning?

Postades av 2009-08-07 17:27:36 - Jonas Sjöblom

Jag var också inne på det spåret men hur laddar jag ett item av okänd typ?

Om jag t.ex. som i exemplet ovan har en baseklass och en childklass hur laddar jag då endast basklassen? (Eftersom jag inte kan veta childklassen innan jag vet basklassens "type").


Ett till exempel för att förtydliga vad jag vill göra.
Jag har en basklass som heter item:
Id
Name
Type

Och en childklass som heter Page
Id
Item (Länk till basklassen)
Content
Layout

Från början vet jag endast Name och vill utifrån det först ta reda på typen och sedan ladda rätt typ, i det här fallet Page.


Svara

Sv: Nhibernate: Generisk länkning?

Postades av 2009-08-07 22:53:47 - Jonas Sjöblom

Nu har jag hittat en lösning som jag är någolunda nöjd med.

Jag har en metod som jag vill använda för att ladda korrekt child:
<code>
public T GetSpecializedByItem<T>(Item item)
{
return _session.CreateCriteria(typeof(T))
.Add(Expression.Eq("Item", item))
.UniqueResult<T>();
}
</code>

Nu är frågan hur jag använder den här metoden.
Är det möjligt att göra något i stil med

<code>
Type childType = Type.GetType(item.Type);
childType child = GetSpecializedByItem<childType>(item);
</code>
(Ovanstående kod fungerar förstås inte men är det möjligt att göra något sånt?


Svara

Sv:Nhibernate: Generisk länkning?

Postades av 2009-08-10 13:57:40 - Peter Hageus

Faktum kvarstår ju att du måste veta typen i något skede, om du inte använder ett interface eller basklass. Om du inte vill göra:

<code>
Type childType = Type.GetType(item.Type);
object child = GetSpecializedByItem<childType>(item);
</code>

Men det beror ju väldigt mycket på hur du sedan vill använda objektet.

Utan att veta speciellt mycket så hade jag nog skapat en abstrakt basklass, ärvt den för alla specialtyper, och sedan låtit NHibernate sköta instanseringen baserat på någon flagga som anger typen.


Svara

Sv: Nhibernate: Generisk länkning?

Postades av 2009-08-10 14:30:04 - Jonas Sjöblom

Tack, lösningen jag kom fram till till sist var att ha:
Item:
int Id
string Name
string Type

Page:
int Id
Item Item


<code>
item = itemRepository.LoadItemByName();

switch(item.Type)
{
case "Page" :
Page page = itemRepository.Specialize<Page>(item);
}
</code>

Till slut kom jag fram till att det var bättre för min slutgiltiga lösning.
Exemplet ovan är något förenklat. Egentligen laddar jag i switchen en usercontrol och kör sedan i uc'n Specialize-funktionen.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 635
27 958
271 741
540
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies