1

클래스가 Entity Framework 클래스에서 상속받을 수 있고 상속 된 클래스 매핑을 사용하여 여전히 DB에 다시 남아있을 수 있습니까? 시도 할 때 'Self-Tracking Entity'클래스에서 파생되는 동안 오류가 발생했으며 SaveChanges는 해당 유형에 매핑이 없음을 나타냅니다. Type이 Entity 클래스에서 상속 되었기 때문에 이것이 작동하도록 엔티티 매핑을 상속받을 수도 있기를 바랬습니다. 누구든지이 일을 할 수 있었습니까?클래스가 Entity Framework 클래스에서 상속받을 수 있고 상속 된 클래스 매핑을 사용하여 계속해서 DB에 보관할 수 있습니까?

지원하려는 시나리오는 엔터티 및 매핑을 포함하는 어셈블리를 참조하는 다른 어셈블리에서 Entity 개체를 확장하는 것입니다. Partials 클래스와 매핑은 Entity 개체가 포함 된 어셈블리로 컴파일됩니다. 따라서 부분 클래스를 사용하여이를 수행 할 수 없습니다.

답변

5

아니요 EDMX (및 자체 추적 엔티티)에서는 불가능합니다. 파생 된 형식을 저장하려면 매핑해야합니다. 생성 된 코드에 아무 것도 추가해야하는 경우 엔티티 클래스의 자체 부분 부분을 사용하십시오.

놀랍게도 코드 우선 (EFv4.1 및 DbContext API)이 가능하지만 이런 경우 자체 추적 엔티티를 사용할 수없는 것처럼 보입니다. 방금 ​​데이터베이스를 확인했으며 코드 우선으로는 불가능합니다. TPH 상속을 자동으로 만들고 파생 클래스를 다른 엔터티로 매핑합니다.

+0

이것은 큰 시간을 안겨줍니다. 파생 된 모든 수업을 사전에 알아야한다는 뜻입니다. 엔티티가 EF와 느슨하게 결합 할 수 없습니다. –

1

실제로 데이터 또는 기본 기능 중 일부를 재정의해야하는 경우가 아니라면 클래스를 확장하는 것이 가장 좋습니다. EF 클래스는 partial으로 선언되었으므로 다른 코드 파일을 만들고 그 안에 사용자 정의 메서드 나 속성을 드롭 할 수 있습니다. 그런 다음 사용자 지정 코드뿐만 아니라 모든 개체 지속성을 얻습니다.

public partial class MyEntity 
{ 
    //Extend the base object 
    public string FormattedName 
    { 
     get 
     { 
     return String.Format("Lookie this! {0}/{1}", this.SomeString, this.SomeInt); 
     } 
    } 
} 

편집 - 귀하의 설명에 대한 응답으로, 당신은 다른 어셈블리에 EF 클래스를 수정해야하는 경우 가장 좋은 방법은 구성원으로 엔터티 클래스를 취하는 래퍼 클래스를 만들 불행하게도이다. 그런 다음 박스형 엔터티의 공용 부분에 액세스하기위한 모든 새로운 기능을 작성합니다. 새로운 재산에 대한 집요함을주지는 않지만 어쨌든 그 재산을 얻지는 못했습니다.

관련 문제