2009-12-18 16 views
12

La riprogettazione per un database di grandi dimensioni presso la nostra azienda fa ampio uso di chiavi primarie composite sul database.Chiavi DB composte con Entity Framework 4.0

Dimenticando gli impatti delle prestazioni, questo causerà qualche difficoltà quando si lavora con questo db in Entity Framework 4.0? È improbabile che la struttura del database cambi e non sto cercando un dibattito "filosofico" ma quali sono gli impatti pratici?

In base a Jeremy Miller, "La chiave composta rende più difficile qualsiasi tipo di mappatura oggetto/relazione e persistenza in generale." ma in realtà non dice il perché. È questo il modo in cui Entity Framework 4.0 gestisce le chiavi?

risposta

13

No, EF4 supporta le chiavi composite in modo corretto.

Il problema è una tabella con una chiave surrogata e tasti compositi. È possibile impostare un solo tasto su ciascun modello; quella chiave può avere più campi, ma puoi averne solo uno dal punto di vista del progettista. Non sei sicuro di modificare manualmente xml o solo il mapping del codice.

È possibile impostare un campo come identità e non un tasto se è necessaria una chiave composta e surrogata sulla stessa tabella. Il campo Identity (Id) non verrà utilizzato da ObjectContext o ObjectStateTracker ma verrà incrementato e interrogabile comunque.

8

Ho avuto problemi con EF4 e tasti compositi. Non supporta le colonne utilizzate come componenti in più di una chiave in una tabella di join.

Vedere la mia domanda precedente Mapping composite foreign keys in a many-many relationship in Entity Framework per ulteriori dettagli. I dadi di esso è che quando si dispone di una tabella di join (che descrive una relazione molti-molti) in cui entrambi i rapporti utilizzano una chiave comune, si otterrà un errore come

Errore 3021: Problema nella mappatura frammenti ...: Ciascuno dei seguenti colonne nella tabella PageView viene mappata più proprietà laterali concettuali: PageView.Version viene mappato (PageView_Association.View.Version, PageView_Association.Page.Version)

L'unico modo per aggirarlo era duplicare la colonna che sconfigge lo scopo di averlo lì affatto.

Buona fortuna!

+6

Ridicolmente fastidioso. –

Problemi correlati