2011-03-22 41 views
31

He creado una clase de entidad en mi aplicación MVC 3. Uno de los atributos llamado RegistryId es la clave principal y la clave externa. ¿Cómo puedo crear una clave principal de columna y una clave externa? No estoy usando el diseñador EF ORM. Estoy codificando clases a mano.Clave principal/externa en Entity Framework

Respuesta

55

Creo que por "no utilizar el diseñador EF ORM" te refieres a la nueva API DbContext de EF 4.1. Porque si no quiere decir DbContext API, todavía debe usar EDMX (diseñador).

También se puede usar anotaciones de datos (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; } 
} 

o puede utilizar la API de fluidez (anulando OnModelCreating en su contexto derivada):

(Edit: mapeo de fluidez era invertida e incompleto)

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); 
} 

Dónde MyEntity es su entidad con FK y Registry es la entidad principal en relación 1: 1.

+0

@Hi Ladislav: ¿y si hay una relación de uno a muchos? – DotnetSparrow

+1

Con la clave primaria uno a muchos en MyEntity no puede ser una clave externa. Debe haber otra propiedad de FK o ninguna propiedad de FK. –

+0

@Ladislav: Cuando intento usar [ForeignKEy ("")], solicita el nombre de la columna. ¿Necesito dar el Registro dentro de él o el Id de la entidad de registro? – DotnetSparrow

Cuestiones relacionadas