2010-11-15 25 views
1

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)cartographie des problèmes un à plusieurs avec EF CTP4

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é l'initialiseur de base de données par défaut, mais cette table est toujours en cours de génération. Qu'est-ce que je fais mal?

Merci Ben

Répondre

0

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

J'ajouterais que la seule raison pour laquelle je définissais explicitement le mapping était parce que EF ne semble pas très bien gérer les classes de base. J'avais une classe de base "Entity" avec une seule propriété "Id" dont toutes mes entités ont hérité. Cela a causé tellement de problèmes avec CTP4 que je l'ai juste échangé avec une interface IEntity. Cela m'a quand même donné les contraintes dont j'avais besoin lorsque je travaillais avec des classes de référentiel génériques.

Espérons que les classes de base d'entité seront mieux prises en charge dans le RTM