Pregunta

Estoy tratando de definir un uno a muchos relación entre la categoría y el Proyecto (una categoría puede tener uno o muchos proyectos, un proyecto puede tener una o ninguna categoría)

public class Project : Entity {

    public virtual string Title { get; set; }

    public virtual Guid? CategoryId { get; set; }
    public virtual Category Category { get; set; }
}

public class Category : Entity {       
    public virtual string Name { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}

he definido las siguientes asignaciones:

            modelBuilder.Entity<Project>()
            .MapSingleType(p => new {
                ProjectId = p.Id,
                p.CategoryId,
                p.Title,
                p.Slug,
                p.ShortDescription,
                p.Description,
                p.CreatedOn,
                p.UpdatedOn
            })
            .ToTable("Projects");

        modelBuilder.Entity<Category>()
            .MapSingleType(c => new {
                CategoryId = c.Id,
                c.Name,
                c.CreatedOn,
                c.UpdatedOn
            })
            .ToTable("Categories");

        // relationships
        modelBuilder.Entity<Project>()
            .HasOptional<Category>(p => p.Category)
            .WithMany()
            .HasConstraint((p, c) => p.CategoryId == c.Id);

Ahora bien, aunque esto parece estar funcionando bien, EF todavía está generando una tabla Categories_Products (utilizado para muchos a muchas asociaciones).

He desactivado el inicializador base de datos predeterminada y aún así se está generando esta tabla. ¿Qué estoy haciendo mal?

Gracias Ben

¿Fue útil?

Solución

Me quita el código de mapa de proyectos, categoría y dejar EF convenciones uso por defecto para crear la base de datos. Esto creó la relación que esperaba (uno a muchos entre la categoría y el proyecto).

Me gustaría añadir que la única razón por la que yo estaba definiendo explícitamente el mapeo se debía a que EF no aparece para manejar clases de base muy bien. Tenía una clase base "Entidad" con una sola propiedad "ID" que todas las entidades heredadas de mis. Esto causó tantos problemas con CTP4 que sólo intercambió con una interfaz IEntity. Esto todavía me dio las limitaciones que necesitaba cuando se trabaja con las clases genéricas de repositorio.

Esperemos clases base entidad será mejor soportado en el RTM

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top