LINQ to SQL: indirecte association

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In een database sla ik gegevens op over een vaste set produkten, Deze set produkten verandert dus nooit, en alle produkten in de set hebben een aantal statische gegevens zoals bijvoorbeeld de naam. Ook hebben al deze produkten een aantal waardes zoals prijs. Binnen een bepaalde periode wijzigen de prijzen van alle produkten in de database. Ik heb eea. als volgt in tabellen opgeslagen:

Produkten
ID
naam

Periode
ID
begindatum
einddatum

ProduktPrijs
ProduktID
PeriodeID
prijs

De tabellen zijn bold, en primaire sleutels italic. Nu wil ik mbv. LINQ to SQL een aantal klassen mappen met deze tabellen. Nou zou ik een association van Periode naar Produkt toe willen voegen, en vanuit de klasse Produkt een association naar ProduktPrijs. Voor produkten geldt dus:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
[Table(Name="Produkten")]
public class Produkt
{
  [Column(IsPrimaryKey = true)]
  public int ID;

  [Column]
  public string naam;

  [Association(ThisKey="ID", OtherKey="ProduktID")]
  public EntitySet<ProduktPrijs> produktPrijs;
}


Het probleem is echter dat tussen de klassen Periode en Produkt geen direct verband zit, en ik dus niets kan koppelen middels ThisKey and OtherKey. Tussen Produkt en ProduktPrijs zit wél een koppeling (ThisKey="ID", OtherKey="ProduktID"), maar hiermee kan ik geen koppeling maken tussen Periode.ID en ProduktPrijs.PeriodeID, aangezien de klasse Produkt er als het ware tussenin zit.

Ik vraag mij af of ik überhaupt op de juiste manier bezig ben en zo ja, hoe ik een association vanuit Periode naar ProduktPrijs kan leggen. Zo nee, welke methode kan voor dit soort verbanden het best gebruikt worden?

Ik weet hoe ik dit middels een LINQ query op kan lossen, maar zou dit graag middels een mapping en kortere LINQ queries oplossen.

Acties:
  • 0 Henk 'm!

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Linq to Sql ondersteunt geen m:n relaties, en jouw relatie is een m:n relatie. Er zijn wel wat truuks te bedenken, maar niet via mapping. Dus handmatig de m:n collectie aanmaken in de class bv.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat is duidelijk. Jammer, maar dan los ik het inderdaad wel op een andere manier op.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je zou natuurlijk in dit geval ook het dynamische query gedeelte kunnen negeren en zelf de query schrijven, maar wel het resultaat via de DataContext terug geven.

DataContext.Execute<Produkt>(qeury);

Op deze manier kun je zelf de queries schrijven. Zorg erwel voor dat je query alle velden door de 'Produkt' entity terug geeft (alleen de velden gemarkeerd met het column attribute zijn nodig).

Via MSDN of Google zijn voldoende voorbeelden te vinden.

If it isn't broken, fix it until it is..