2011-02-23 3 views
1

기본 클래스가 관련되어있을 때 EF CTP5의 다 대다 관계에 이상한 문제가 있습니다. 먼저 작동하는 간단한 매핑을 보여 드리겠습니다.엔티티 기본 클래스를 사용할 때 EF CTP5 매핑 문제

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 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 abstract class Entity 
{ 
    public int ID { get; set; } 
} 

나는이 Entity 기본 클래스에서 내 두 엔티티 ProductProcess 상속을 만들었을 물론 각 클래스에서 ID 속성을 제거했습니다. ID 속성이 이제 기본 클래스에서 구현된다는 점을 제외하면 두 엔터티는 동일합니다.

컴파일하고 내 프로젝트를 실행 한 후, 나는 다음과 같은 "유명한"EF 런타임 오류 얻을 : 나는를 제거하는 경우 때문에,이 오류가 많은-to-many 연관 관계가 있음을

"Sequence contains more than one matching element"

을 알고 Process 클래스의 다 대다 매핑은 모든 것이 올바르게 실행되지만 물론 연관성은 없습니다.

아무도 문제가있는 것을 볼 수 있습니까? 이것은 CTP5 버그입니까, 아니면 구현에 문제가 있습니까? 버그라고 판명되면 해결 방법에 대한 제안이 있습니까?

답변

1

같은 문제가 발생하여 많은 문제가 발생했습니다. this answer

요컨대 : 기본 엔터티 클래스는 고정 될 때까지 사용하지 마십시오. Id 속성 대신 인터페이스를 사용할 수 있습니다.

+0

나는 그것이 두려웠습니다. 하지만 디에고를 확인해 주셔서 감사합니다. MS가 버그를 알고 있고 그것이 RTM에서 수정 될 것이라는 것을 알고 있습니까? –

+0

@ TommyJakobsen : 잘 모르겠습니다. 나는 포럼에서 물었지만 아직 답변을 얻지 못했습니다. –

+0

문제가 해결 된 것 같아서 스레드를 닫으려면이 대답을 받아 들일 것입니다. –