2013-03-13 21 views
12

Stavo solo esercitando il codice prima nuovo framework di entità di database da msdn, voglio sapere se una tabella senza chiave primaria può essere creata nel codice prima nuovo database EF?Possiamo avere una tabella senza chiave primaria nel framework di entità?

+2

http://stackoverflow.com/questions/1944366/how-do-you-update-a-table-with-a-keyign-key-to-another-table-in-ado-net-entity – Hidden

+1

Have uno sguardo a http://stackoverflow.com/questions/4068920/code-first-ctp4-table-with-no-primary-key – Francesco

risposta

11

No, non è possibile perché Entity Framework deve conoscere la chiave per tenere traccia sull'oggetto quando si effettua un'operazione di aggiornamento o di eliminazione.

In ogni caso non è una buona idea avere un tavolo senza PrimaryKey

+3

Ok wahid, hai ragione, una tabella senza PK, operazione generale come aggiornamento o eliminazione può Si può eseguire, ma se posso dire a EF di usare una particolare colonna che è unica ma non PK, allora in quel caso, questa operazione (aggiornamento, cancellazione) può essere eseguita da EF? – Prateek

+1

Nessuna colonna deve essere PK –

13

C'è una grande differenza tra quello che EF può fare con un database, e ciò che è possibile con un database.

La maggior parte dei database consente una tabella senza una chiave primaria. La maggior parte dei database consente inoltre che una tabella rimanga senza un indice cluster/tabella organizzata indice (o quale sia il termine specifico per esso in altri sistemi di database).

Non c'è niente di sbagliato in questo, e non si dovrebbe dire che è una cattiva idea avere una tabella senza un PK.

Come sempre, dipende dalle esigenze e dall'utilizzo della tabella specifica. per esempio. una tabella di log, non ha bisogno di un PK. Non sarà mai usato come FK, quindi a cosa serve?

In conclusione, EF non supporta le tabelle senza una chiave fuori dalla scatola, ci sono alcuni strani soluzioni, ma nessuna che ho visto è abbastanza buona. È una vergogna.

+0

Esattamente. Abbiamo una tabella delle impostazioni con un record. Non ha davvero bisogno di un PK. –

4
  1. Entity Framework must avere una chiave identificata sull'entità (classe POCO) che i modelli da tavolo.
  2. La chiave definita in Entity Framework deve essere NON nel database sottostante (ad esempio, tabella sql).

Se la tabella SQL non ha una chiave primaria, è ancora possibile modellarla in Entity Framework, sarà sufficiente definire una chiave per quell'entità. Scegli una o più (possibilmente tutte) colonne sull'entità che, se combinate, identificheranno in modo univoco quell'istanza all'interno di una raccolta di entità. Nota questo è importante solo per l'aggiornamento o l'eliminazione delle entità, in quanto devono essere identificate in modo univoco con le altre in quella raccolta per mirare alla modifica. Trova/Seleziona e Aggiungi/Inserisci non richiedono questa coerenza.

+0

ma non mi permette di aggiungere il tavolo – dangalg

Problemi correlati