31 votes

Clé primaire/étrangère dans Entity Framework

J'ai créé une classe d'entité dans mon application MVC 3. L'un des attributs nommé RegistryId est une clé primaire ainsi qu'une clé étrangère. Comment puis-je faire en sorte qu'une colonne soit à la fois clé primaire et clé étrangère ? Je n'utilise pas EF ORM designer. Je code les classes à la main.

55voto

Ladislav Mrnka Points 218632

Je pense que par "ne pas utiliser EF ORM designer", vous voulez dire nouveau DbContext API à partir de EF 4.1. Car si vous ne voulez pas DbContext API vous devez toujours utiliser EDMX (designer).

Vous pouvez soit utiliser des annotations de données ( System.ComponentModel.DataAnnotations ): KeyAttribute y ForeignKeyAttribute :

public class Registry
{
    public virtual int Id { get; set; }
    public virtual MyEntity MyEntity { get; set; }
}

public class MyEntity
{
    [Key, ForeignKey("Registry")]
    public virtual int RegistryId { get; set; }

    public virtual Registry Registry { get; set; }
}

Ou vous pouvez utiliser l'API fluide (en remplaçant OnModelCreating dans votre contexte dérivé) :

(Edit : fluent mapping was reversed and incomplete)

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<MyEntity>()
                .HasKey(e => e.RegistryId);
    modelBuilder.Entity<MyEntity>()
                .Property(e => e.RegistryId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    modelBuilder.Entity<MyEntity>()
                .HasRequired(e => e.Registry)
                .WithRequiredDependent(r => r.MyEntity);
}

MyEntity est votre entité avec FK et Registry est l'entité principale dans une relation 1:1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X