2011-08-10 13 views
12

Estamos utilizando EF 4.1 y la API fluida para obtener datos de una base de datos heredada (no se puede modificar la base de datos). Estamos teniendo un problema al crear una relación entre dos tablas donde las columnas relacionadas NO son claves primarias y externas.Crear asociación en campos clave no primarios con Entity Framework 4.1 Fluent API

Con las clases siguientes, ¿cómo configuraríamos la relación uno a muchos entre Report y RunStat para que Report.RunStats devuelva todas las entidades RunStat donde los campos ReportCode son iguales?

public class Report 
{ 
    [Key] 
    public int ReportKey { get; set; } 
    public string Name { get; set; } 
    public int ReportCode { get; set; } // Can we associate on this field 
    public virtual ICollection<RunStat> RunStats { get; set; } 
} 

public class RunStat 
{ 
    [Key] 
    public int RunStatKey { get; set; } 
    public int ReportCode { get; set; } 
    public DateTime RunDate { get; set; } 
} 

Básicamente quiero utilizar la API de Fluido para configurar EF pensar que Report.ReportCode es la ForeignKey y RunStat.ReportCode es PrimaryKey.

Respuesta

10

No es posible. Las relaciones en EF siguen exactamente las mismas reglas que en la base de datos. Significa que la tabla principal debe tener un identificador único al que hace referencia la tabla dependiente. En el caso de la base de datos, el identificador puede ser clave principal o columna (s) única (s) de la tabla principal. De lo contrario, no es una relación válida.

Entidad marco no admite claves únicas. Si desea tener una relación de uno a varios entre Report y RunStat, su tabla dependiente (RunStat) debe contener una columna con el valor Report.ReportKey. No hay otra manera de hacerlo automático; de lo contrario, simplemente debe convertirlo en propiedad personalizada y llenarlo manualmente desde el marco de entidad cuando lo necesite.

+1

Voto para añadir esto como una nueva característica de Entity Framework http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-ie-candidate-key- apoyo – Brian

Cuestiones relacionadas