8

¿Cómo puedo asignar la división de tabla con el código EF primero? La división de tabla para EDMX se describe, por ejemplo, here. Permite mapear dos entidades con relación 1: 1 en la misma tabla. Sé que puedo hacer el mapeo similar con entity and complex type, pero la gran diferencia es que el tipo complejo no se puede cargar de forma diferida (o no se carga en absoluto), que es la razón principal para dividir las tablas.Cómo asignar la división de tablas en EF Code First?

Respuesta

10

Así es como acabo de recibir EF 4.1 (RC) para dividir las tablas en Code First.

  1. Defina sus dos entidades. Asegúrese de incluir la clave en ambas entidades. Además, incluya propiedades de navegación en cada entidad que apunta a la otra entidad.
  2. En su anulación de OnModelCreating. . . a. Asigne ambas entidades a la misma tabla. b. Crea la relación entre las dos tablas.

    modelBuilder.Entity<EntityOne>().ToTable("MySingleTable"); 
        modelBuilder.Entity<EntityTwo>().ToTable("MySingleTable"); 
    
        modelBuilder.Entity<EntityOne>().HasRequired(p => p.NavToEntityTwo).WithRequiredDependent(c => c.NavToEntityOne); 
    

Esto es trabajo para mí, pero se dan cuenta que, dada la novedad del RC sólo he sido capaz de mirar en escenarios limitados y simples.

+0

Ya probé esto y no funcionó. Lo intentaré de nuevo y te lo haré saber. –

+0

¿Puede explicar de qué manera no está funcionando? Una cosa que me viene a la mente es que no estoy haciendo que la base de datos genere el valor de la clave primaria. En su lugar, estoy configurando el valor clave en el código, y descubrí que debo agregar el valor tanto en la primera entidad como en la segunda entidad antes de llamar a SaveChanges. –

+0

Funciona. No tengo idea de lo que configuré mal cuando lo probé. También recibí la respuesta en el foro de MSDN donde se utiliza la identificación autogenerada, así como la propiedad de navegación solo en la entidad principal: http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/71da8ea5-7e34-4f7b -941b-ccb1a5a26ea7 / –

Cuestiones relacionadas