Domanda

Sto cercando di definire un uno a molti relazione tra la categoria e Project (una categoria può avere uno o molti progetti, un progetto può avere uno o no Categoria)

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; }
}

Ho definito i seguenti mappature:

            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);

Ora, anche se questo sembra funzionare bene, EF è ancora generando un tavolo Categories_Products (usato per molti a molte associazioni).

ho disabilitato l'inizializzatore database predefinito ancora questa tabella è ancora in fase generato. Che cosa sto facendo di sbagliato?

Grazie Ben

È stato utile?

Soluzione

Ho rimosso il codice di mappatura del progetto e la categoria e lasciare EF convenzioni uso predefinito per creare il database. Questo ha creato il rapporto che mi aspettavo (uno a molti tra la categoria e di progetto).

Vorrei aggiungere che l'unico motivo che mi definiva in modo esplicito la mappatura era perché EF non sembra gestire classi di base molto bene. Ho avuto una classe di base "Entity" con una singola proprietà "id" che tutti i miei entità ereditati da. Ciò ha causato così tanti problemi con CTP4 che ho appena scambiato con un'interfaccia IEntity. Questo mi ha dato ancora i vincoli di cui avevo bisogno quando si lavora con le classi repository generiche.

Speriamo classi base dell'entità verrà meglio supportato nel RTM

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top