0

나는 우리가 엔티티 프레임 워크 코드 첫 번째를 사용하여 데이터베이스에 이미 존재하는 C# 코드를 매핑 프로젝트에 참여입니다. 여기에 코드 자체를 재현하지는 않겠지 만 동일한 문제를 다루는 의사 코드를 제시 할 것입니다. 얻기 InvalidOperationException이는

나는 다른 클래스의 목록을 가지고 데이터베이스에 클래스를 매핑하는 것을 시도하고있다. 예를 보여 드리겠습니다 :

public Class ListClass 
{ 
    public List<SubClassA> ListOne 
    { 
     get { return BaseClass.OfType<SubClassA>().Where(b => !b.BoolOne && b.BoolTwo).ToList(); } 
    } 

public List<SubClassA> ListTwo 
    { 
     get { return BaseClass.OfType<SubClassA>().Where(b => b.BoolOne && b.BoolTwo).ToList(); } 
    } 
} 


public abstract class BaseClass 
{ 
    public bool BoolOne {get; set;} 

    #Region EF 
    public GUID PrimaryKey {get; set;} 
    public GUID ListClassForeignKey {get; set;} 
    #EndRegion 
} 

public class SubClassA : BaseClass 
{ 
    public bool BoolTwo {get; set} 
} 

Class SubClassB : BaseClass 
{ 
    //Contents.. 
} 

요약 : ListClass에는 SubClassA 목록이 포함되어 있습니다. BaseClass와 SubClassA는 ListClass에 대해 아무것도 모릅니다. BaseClass의 GUID- 특성은 Entity Framework와 함께 사용하기 위해 추가됩니다. 그렇지 않으면 기존 클래스가 변경되지 않습니다. 따라서 Fluent API를이 프로젝트에 사용하는 이유는 다음과 같습니다.

class ListClassConfiguration : EntityTypeConfiguration<ListClass> 
{ 
    public ListClassConfiguration() 
    { 
     HasKey(f => f.PrimaryKey); 
     Property(f => f.PrimaryKey).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
     HasMany(f => f.ListOne).WithOptional().HasForeignKey(f => f.ListClassForeignKey); 
     HasMany(f => f.ListTwo).WithOptional().HasForeignKey(f => f.ListClassForeignKey); 

    } 
} 

컨텍스트 클래스에는이 구성을 추가하기 만하면됩니다. 모델이 변경 될 때마다 데이터베이스가 삭제됩니다. 저는 현재 BaseClass로에 대한 TPH-매핑을 사용하고 있으며 하위 클래스입니다.

경우 InvalidOperationException :

내가 추가하고 목록에 대해 참조 물체로 ListClass을 저장하려고

, 나는이 예외를 얻을. 외래 키 구성 요소 'ListClassForeignKey은'형 'SubClassA'에 선언 된 재산이 아니다. 모델에서 명시 적으로 제외되지 않았는지와 유효한 원시 속성인지 확인하십시오. 그래서

, 조언?

편집 : 나는 실제 프로젝트에서, 빈리스트가있을 것 같다 것으로 나타났습니다. 구성 클래스에서 외래 키를 제거하려고했는데 내용이없는 데이터베이스가 있습니다 (열에 NULL 값만있는 행 하나). 이 예제에서는 'BaseClass'라는 이름의 TPH 테이블 만 비어 있거나 NULL 값만 있음을 나타냅니다. 그게 문제의 일부를 설명 할 수 있을까요?

답변

0

동료는 list-properties의 문제점을 지적합니다. getter 만, setter는없고 ListClass에서도 사용하는 BaseClass 목록을 기반으로합니다.