2011-04-05 15 views
8

Estoy tratando de cambiar EF1 para el código EF4.1 primero en una aplicación donde el esquema no se puede cambiar porque se usa en la Replicación de Servidor SQL. El esquema es terriblemente pobre y en muchos lugares describe las relaciones completamente hacia atrás.Cómo usar Entity Framework 4.1 Código Primero para forzar una relación de uno a uno para una relación uno a muchos en la base de datos

Lo que intento hacer es crear una relación uno a uno entre dos clases, pero el esquema de la base de datos mantiene erróneamente los datos como uno a muchos.

public class ClassA 
{ 
    public ClassB 
    { 
     get; 
     set; 
    } 
} 

Por desgracia la mesa ClassB en la base de datos hace referencia a ClassAId en lugar de claseA tener un ClassBId como se muestra aquí:

CREATE TABLE [dbo].[ClassA] 
    [Id] [bigint] IDENTITY 


CREATE TABLE [dbo].[ClassB] 
    [Id] [bigint] IDENTITY 
    [ClassAId] [bigint] 

Cómo puedo configurar mi archivo de asignación que se hereda de EntityTypeConfiguration para obligar a este relación.

public class ClassAMapping : EntityTypeConfiguration<ClassA> 
{ 
    public ClassA() 
    { 
     HasKey(f => f.Id); 

     // what happens here to force a one to one???? 
    } 
} 

Respuesta

5

Gracias al Jakub Konecki por el enlace al artículo, en realidad no contenía la respuesta que estaba buscando, pero sí link to an earlier post en la serie donde encontré la respuesta.

La manera de forzar a éste a una asociación es la siguiente:

public class ClassAMapping : EntityTypeConfiguration<ClassA> 
{ 
    public ClassA() 
    { 
     HasKey(x => x.Id); 

     HasOptional<ClassB>(x => x.ClassB) 
       .WithRequired() 
       .Map(x => x.MapKey("ClassBId")); 
    } 
} 

Este mapeo lee como:

"The ClassA entity has an optional association with one ClassB entity, but this association is required for the ClassB entity." 

Tenga en cuenta que esta solución es uni-direccional y no permitirá que el siguiente:

ClassB b = new ClassB(); 
string test = b.ClassA.SomeString; 

Si se requiere una asociación bidireccional, consulte the link that was found que elabora más.

El artículo vinculado por Jakub es parte de un series of posts que son una buena lectura si está tratando de resolver sus asociaciones EF4.1.

Cuestiones relacionadas