Chiave composita con codice EF 4.1 prima


105

Sto cercando di capire come avere una chiave composita usando il codice EF First 4.1 RC.

Al momento sto utilizzando l'annotazione dati [Chiave], ma non riesco a specificare più di una chiave.

come si specifica una chiave composta?

Ecco il mio esempio:

 public class ActivityType
{
    [Key]
    public int ActivityID { get; set; }

    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Ho bisogno che anche "ActivityName" sia una chiave. Certo, posso codificare per questo, ma non è un buon design del database.

Risposte:


186

Puoi contrassegnare entrambe le proprietà ActivityIDe ActivityNamecon Keyannotazioni oppure puoi utilizzare l'API fluente come descritto da @taylonr.

Modificare:

Questo dovrebbe funzionare - la chiave composita definita con annotazioni richiede un ordine di colonna esplicito:

public class ActivityType
{
    [Key, Column(Order = 0)]
    public int ActivityID { get; set; }

    [Key, Column(Order = 1)]
    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Vedo. Grazie per avermi aggiornato. Contrassegnato come risposta.
bugnuker

1
Comunque per aggiungere vincoli / indici univoci che non sono realmente chiavi?
Shimmy Weitzhandler

105

Non usiamo le annotazioni, invece sovrascriviamo il generatore di modelli, nel qual caso puoi fare qualcosa come:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });

questo funziona, ma spero in un'annotazione che funzioni. C'erano campioni con CTP 4 ma questi non funzionano più in 4.1 RC
bugnuker

3
So che stavi cercando annotazioni, ma pensavo che questo potesse aiutare nella ricerca ... come ho detto che non stiamo usando le annotazioni, quindi non sono stato di grande aiuto lì ... spero che tu trovi la risposta
taylonr

14
Mi piace questo approccio. Mantiene il modello pulito dalle preoccupazioni del contesto. Grazie.
ctorx

Qualcuno sa se l'impostazione della chiave primaria composita utilizzando un'api fluente funziona per SQL CE? Non funziona per me (dà un errore che "EntityType ... non ha una chiave definita") e non sono sicuro di creare una nuova domanda o meno.
Kasitan

Se deridi il tuo DbContext a scopo di unit test, come ti assicuri che modelBuilder venga eseguito per definire la relazione tra entità e / o chiavi primarie composite?
Jim Aho
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.