2010-11-15 146 views
1

我試圖定義一個類和項目之間的多對多關係(一個類別可以有一個或多個項目,一個項目可以有一個或無甲類)問題映射一個與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; } 
} 

我已經定義以下映射:

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

現在雖然這似乎是工作正常,EF仍舊產生Categories_Products表(用於多對多關聯)。

我已經禁用了默認的數據庫初始值設定項,但此表仍在生成。我究竟做錯了什麼?

感謝 本

回答

0

我刪除的項目和類別映射代碼,讓EF使用默認的慣例來創建數據庫。這創造了我期望的關係(類別和項目之間的一對多關係)。

我想補充一點,我明確定義映射的唯一原因是因爲EF似乎無法很好地處理基類。我有一個基類「實體」與一個單一的財產「Id」,我的所有實體繼承。這導致了CTP4的許多問題,我只是將它與接口IEntity進行了交換。這仍然給了我使用通用存儲庫類時所需的約束。

希望實體基類可以更好地支持RTM