4

此代碼無效。哪裏不對? OnModelCreating不會產生任何結果?因爲我無法在我的數據庫中看到「ProductCategories」表。CTP5 vs release 4.1 EF多對多關係

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

在此先感謝。

+0

你能否提供更多信息?有沒有機會看到錯誤的數據庫和/或上下文?任何錯誤消息? – Diadistis

+0

嗨,我試圖給更多的信息。沒有任何錯誤消息。一切都好!但是我們沒有爲「ProductCategories」制定數據表。 –

+0

這很奇怪,我已經添加了你的實體/映射到一個項目,並且一切按預期工作(包括'ProductCategories'表格 – Diadistis

回答

1

這是我已經試過在一個控制檯應用程序,按預期工作:

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

真的很奇怪,但工作。anyway解決方案是解決方案。 –