2011-06-27 13 views
5

tengo las dos entidades siguientes (entre muchos, pero estos me dan el problema)EF 4.1 Código primera clave externa agrega la columna extra

public class StartPoint 
{ 
    public int StartPointId { get; set; } 
    public string Description { get; set; } 
    public int StartPointNumber { get; set; }  
    public int StartAreaId { get; set; } 
    public StartArea StartArea { get; set; } 
}  

y

public class StartArea 
{ 
    public int StartAreaId { get; set; } 
    public string Description { get; set; } 
    public ICollection<StartPoint> StartPoints { get; set; } 
} 

Cuando permitiendo EF para crear mi la base de datos se quejó de que necesitaba desactivar la eliminación en cascada debido a múltiples rutas, lo que he hecho de la siguiente manera.

 modelBuilder.Entity<StartPoint>() 
      .HasRequired(x => x.StartArea) 
      .WithMany() 
      .HasForeignKey(x => x.StartAreaId) 
      .WillCascadeOnDelete(false); 

El problema es, cuando se crea la base de datos consigo dos claves externas, uno se llama StartAreaId, como me esperaba, y el otro es StartArea_StartAreaId. Solo StartAreaId se está utilizando. Por qué y cómo me deshago de StartArea_StartAreaId. Si elimino HasForeignKey en el contexto y elimino StartAreaId de la entidad, obtengo varias columnas StartArea_StartAreaId, como en StartArea_StartAreaId y StartArea_StartAreaId1. ¿Qué debo hacer para evitar que esto suceda? Solo quiero StartAreaId como mi clave externa.

Respuesta

3

El problema está vacía WithMany:

modelBuilder.Entity<StartPoint>() 
     .HasRequired(x => x.StartArea) 
     .WithMany(y => y.StartPoints) 
     .HasForeignKey(x => x.StartAreaId) 
     .WillCascadeOnDelete(false); 
+0

Sí, por supuesto, no sé por qué no había pensado en esto. Gracias. – Dirk

+1

Gracias Ladislav! Beneficiado por sus muchas respuestas, incluida esta. La única observación es que este problema es intermitente (mi colega no se vio obligada a proporcionar nada en WithMany, pero tuve que hacerlo (se merece MVP en EF :)) –

Cuestiones relacionadas