4

Ce code ne fonctionne pas. Qu'est-ce qui ne va pas? OnModelCreating n'effectue aucun résultat? Parce que je ne peux pas voir la table "ProductCategories" dans ma base de données.CTP5 vs version 4.1 EF relation plusieurs à plusieurs

public class GoldContext : DbContext 
    { 
     public virtual DbSet<Prouct> Products { get; set; } 
     public virtual DbSet<Category> Categories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //HACK:4.1 modelBuilder.Conventions.Add(new DecimalPrecisionAttributeConvention()); 
     modelBuilder.Entity<Product>() 
      .HasMany<Category>(m => m.Categories) 
      .WithMany().Map(m => 
       m.MapLeftKey("ProductId") 
       .MapRightKey("CategoryId") 
       .ToTable("ProductCategories")); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

//product and category classes look like this. 

    public class Product 
    { 
     [Key] 
     public int Id { get; set; } 

     public virtual string Name { get; set; } 

     public virtual ICollection<Category> Categories { get; set; } 
    } 

    public class Category 
    { 
     [Key] 
     public int Id { get; set; } 

     public virtual string Name { get; set; } 

     public virtual ICollection<Product> Products { get; set; } 
    } 

Merci d'avance.

+0

Pouvez-vous fournir plus d'informations? Y a-t-il une chance que vous cherchiez la mauvaise base de données et/ou contexte? Des messages d'erreur? – Diadistis

+0

Salut, j'ai essayé de donner plus d'infos. Il n'y a aucun message d'erreur. tout va bien! mais il n'y a pas de datable comme "ProductCategories" promis pour nous. –

+0

C'est bizarre, j'ai ajouté vos entités/mappings à un projet et tout a fonctionné comme prévu (y compris la table 'ProductCategories'.) – Diadistis

Répondre

1

C'est ce que j'ai essayé dans une application console et fonctionne comme prévu:

namespace Q7122388 
{ 
    #region Imports 

    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using System.Data.Entity; 
    using System.Linq; 

    #endregion 

    public class Product 
    { 
     [Key] 
     public int Id { get; set; } 

     public virtual string Name { get; set; } 

     public virtual ICollection<Category> Categories { get; set; } 
    } 

    public class Category 
    { 
     [Key] 
     public int Id { get; set; } 

     public virtual string Name { get; set; } 

     public virtual ICollection<Product> Products { get; set; } 
    } 

    public class DatabaseContext : DbContext 
    { 
     public virtual DbSet<Product> Products { get; set; } 
     public virtual DbSet<Category> Categories { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Product>() 
       .HasMany<Category>(m => m.Categories) 
       .WithMany().Map(m => 
        m.MapLeftKey("ProductId") 
        .MapRightKey("CategoryId") 
        .ToTable("ProductCategories")); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>()); 
      using (var context = new DatabaseContext()) 
       context.Database.Initialize(true); 
     } 
    } 
} 
+0

vraiment étrange, mais de travail.Malgré la solution est la solution. –

Questions connexes