Question

Je suis en train de définir une relation un à plusieurs entre les catégories et le projet (une catégorie peut avoir un ou plusieurs projets, un projet peut avoir un ou pas de catégorie)

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

J'ai défini les applications suivantes:

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

Maintenant, bien que cela semble fonctionner très bien, EF génère encore une table de Categories_Products (utilisé pour beaucoup de nombreuses associations).

J'ai désactivé la base de données par défaut initialiseur encore cette table est encore produite. Qu'est-ce que je fais mal?

Merci Ben

Était-ce utile?

La solution

Je retire le projet et catégorie de code de cartographie et de laisser EF utiliser les conventions par défaut pour créer la base de données. Cela a créé la relation que je m'y attendais (un à plusieurs entre catégorie et projet).

Je voudrais ajouter que la seule raison pour que je définir explicitement la mise en correspondance est parce que EF ne semble pas gérer les classes de base très bien. J'ai eu une classe de base « entité » avec une seule propriété « Id » que toutes mes entités héritées de. Cela a causé tant de problèmes avec CTP4 que je viens permutés avec une interface IEntity. Cela m'a donné encore les contraintes que je avais besoin lorsque vous travaillez avec des classes du référentiel générique.

Espérons que les classes de base de l'entité sera mieux pris en charge dans le RTM

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top