Avatar billede jonas_h Nybegynder
27. oktober 2008 - 21:49 Der er 10 kommentarer og
1 løsning

Udvide LinQ Entities

Jeg har nu leget en masse med LinQ, og er lidt i tvivl om hvordan man griber det an på den bedste måde. Det er ikke ligefrem Microsofts stil at lave en "Best practice" beskrivelse.

Men hvordan benytter man normalt de entities som linq genererer? Tænker her på, hvis man gerne vil tilføje nogle metoder til dem? Gøres dette normal via nogle Manager-klasser i "business-laget" eller kan man udvide sine entities på en eller anden måde? Det er vel lidt spild af tid/arbejde at lave nogle nye entity-klasser som man egentligt bare mapper værdierne fra linq-entities over?

Har I nogle bud?
Avatar billede everclear Praktikant
31. oktober 2008 - 09:50 #1
Du kan jo evt. lave en partial class hvis det er det du mener. Hvis du f.eks. vil knytte nogle ekstra metoder til din Customer entity (eller hvad du nu har fra din datacontextfil), så kan du jo lave:

public partial class Customer

Er det sådan noget vi er ude i?
Avatar billede montago Praktikant
01. december 2008 - 13:43 #2
Dét man gør for at udvide LINQ og collections (og alle andre objekter i C# 3.5) er via Extension methods


public class Extensions{

  public static void NyFunction(this MyClass MC, int ping){
      //gør noget ved MC og ping
  }

  public static string NyFunction(this MyClass MC, int ping){
      //return MC.abc + ping;
  }
}

ved LINQ er alle typerne IENummerable<TSource> og man skal derfor prøve at extende med TSource typer... hvilket er lidt kringlet nogle gange...
Avatar billede montago Praktikant
01. december 2008 - 13:56 #3
Extensions skal vist også være static
Avatar billede jonas_h Nybegynder
01. december 2008 - 15:21 #4
Interessant svar montago! Helt sikkert noget af det jeg søger.

men her tænker jeg også på hvis man vil lave en struktur hvor man nedarver de forskellige linq entities fra hinanden osv. Kender godt metoden som man laver nedarvning i selve linq-to-sql, men synes det er en ret dårlig metode når man ser på databasedesign.
Avatar billede montago Praktikant
01. december 2008 - 22:44 #5
tror ikke jeg helt forstår hvad du vil ?

hvilken funktionalitet er det du savner ?
Avatar billede jonas_h Nybegynder
01. december 2008 - 23:14 #6
Sorry hvsi det er lidt kringlet forklaret.
Det jeg gerne vil have, er helt normale ting som man bruger i object orienterede sprog. Nedarvning mellem klasser, interfaces osv osv. Dette får man jo ikke out of the box med linq entities.
Avatar billede montago Praktikant
02. december 2008 - 09:27 #7
altså...

I de projekter jeg sidder med lader vi Linq være Linq og modellere vores objekter ved siden af -- som regel som containers eller som funktionsobjekter - hvor disse kan arve og implementere interfaces...

Linq2sql skal jo så kun bruges til at snakke med databasen.

Linq2objekt kan så sagtens benytte sig af de objekter vi har defineret...

jeg kan ikke se hvorfor du vil gå den anden vej rundt :-)
Avatar billede jonas_h Nybegynder
27. januar 2009 - 11:35 #8
Ved godt det er et gammel emne, men har lige et hurtigt spørgsmål.
Synes jeg har tænkt og tænkt og kan ikke finde den optiamle måde at lave egne objekter "ovenpå" linq-entities. Er det simpelthen bare wrapper-klasser hvor der bliver mappet linq-properties over i custom-objekterne? Bliver det ikke hurtigt meget slavearbejde hvis man har en masse one-to-many relations osv på linq entiteterne?
Avatar billede montago Praktikant
27. januar 2009 - 13:48 #9
pas...

som sagt - Linq2SQL er måden at snakke med sin database på.
Linq2Entities er måden at snakke med sine collections på

alt andet kode, skal laves som logik... det er meget meget simpelt !!


class Splat
{
  public Splat(){ foreach(var item in db.Splat){ doSometing(); } }
}

længere er den ikke
Avatar billede arne_v Ekspert
01. februar 2009 - 18:33 #10
LINQ to objects er en måde at snakke med sine collections på. LINQ to entities er også til database.
Avatar billede arne_v Ekspert
01. februar 2009 - 18:44 #11
Med hensyn til substansen, så er data klasser til data og ikke til business logic.

Hvis man har et behov for at lave klasser med samme data i et lag ovenover, så er
det tit et tegn på at laget ovenover er et overflødigt passthrough lag. Og selvom
det ikke er tilfældet så er det ihvertfald en meget tæt kobling mellem ens business
services og ens database struktur.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester