2011-02-23 69 views
1

當涉及基類時,EF CTP5中的多對多關係存在奇怪的問題。我將首先向您展示一個簡單的映射。使用實體基類時的EF CTP5映射問題

我有以下兩個類(實體):

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Process> Processes { get; set; } 
} 

public class Process 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

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

我的映射類:

public class ProductMapping : EntityTypeConfiguration<Product> 
{ 
    public ProductMapping() 
    { 
     ToTable("Products"); 
     HasKey(t => t.ID); 

     Property(t => t.ID).HasColumnName("product_id"); 
     Property(t => t.Name).HasColumnName("name"); 
    } 
} 

public class ProcessMapping : EntityTypeConfiguration<Process> 
{ 
    public ProcessMapping() 
    { 
     ToTable("Processes"); 
     HasKey(t => t.ID); 

     Property(t => t.ID).HasColumnName("process_id"); 
     Property(t => t.Name).HasColumnName("name"); 

     HasMany(p => p.Products) 
      .WithMany(p => p.Processes) 
      .Map(m => 
      { 
       m.ToTable("Product_processes"); 
       m.MapLeftKey(process => process.ID, "process_id"); 
       m.MapRightKey(product => product.ID, "product_id"); 
      });  
    } 
} 

此映射完美的作品。 但是,我想爲我的實體介紹一個基類。因此,作爲一個開始,我創建了以下的基類:

public abstract class Entity 
{ 
    public int ID { get; set; } 
} 

我做我的兩個實體ProductProcess繼承這個Entity基類,當然,除了各階級的ID屬性。因此,除了ID屬性現在在基類中實現之外,這兩個實體是相同的。

編譯和運行我的項目後,我得到了下面的「著名的」 EF運行時錯誤:

"Sequence contains more than one matching element"

我知道這個錯誤是關係到許多-to-many關聯,因爲如果我刪除來自Process類的多對多映射,一切正常運行,但沒有關聯當然。

任何人都可以看到什麼問題在這裏?這是一個CTP5錯誤還是在我的實現中出現了問題?如果事實證明是一個錯誤,您是否有解決方法的建議?

回答

1

我遇到了同樣的問題,只有多對一的關聯。請參閱this answer

簡而言之:在修復此問題之前不要使用基礎實體類;您可以使用接口來代替Id屬性。

+0

我很害怕這個問題。但謝謝你們確認迭戈。你知道MS是否知道這個錯誤以及它是否會在RTM中修復? – 2011-02-23 13:10:54

+0

@TommyJakobsen:我不知道;我在論壇上問,但沒有得到答案。 – 2011-02-23 14:07:56

+0

似乎現在這個問題已經消失,所以我只會接受這個答案來關閉線程。 – 2011-10-06 08:47:30