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.
Réponse
Trop de publicités?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);
}
Où MyEntity
est votre entité avec FK et Registry
est l'entité principale dans une relation 1:1.