4

기본 키 사용에 대한 내 문제를 해결하기 위해 이미 고생하고 있습니다. 제발, 누군가이 퍼즐을 푸는데 도와주세요 !!!엔티티 프레임 워크 BaseEntity에서 CTP4 비표준 기본 키 이름 사용

저는 Code First 방식을 사용하여 CTP4와 함께 Entity Framework를 사용하고 있습니다. 나는 Huyrua see here에 의해 출판 된 저의 프로젝트 저장소 패턴을 채택했습니다. 나는이 유부남과 특히 CTP4 가능성으로 인해 매우 빠져 나왔다.

엔티티 정의의 경우 여러 중첩 레이어를 사용합니다. 우리가 BaseEntity이 맨 아래에, 그 같은 몇 가지 일반적인 필드를 포함

public abstract class BaseEntity: IEntityBase 
    { 
     public virtual Nullable<System.DateTime> InsertDate { get; set; } 
     public virtual Nullable<int> PK_InsertUserAccount { get; set; } 
     public virtual byte[] TimeStamp { get; set; } 
    } 

그런 다음 우리는 예를 들어, 우리의 구체적인 실체에 대한이 클래스에서 파생 :

public class Person : BaseEntity 
    { 
     public virtual int PK_Person { get; set; } 
     public virtual byte PersType { get; set; } 
     public virtual string eMail { get; set; } 
     public virtual string Name { get; set; } 
    } 

참고! DB 테이블 기본 키 이름은 "Id"가 아닙니다! PK_ 패턴을 사용하고 있습니다. 이러한 이유로 우리는 BaseEntity에 PK 필드 정의를 포함하지 않습니다. 또한, 우리는 우리의 비에 의해 국제 대회 기본 키 매핑 사용 EntityConfiguration를 사용

public class PersonMapping : EntityConfiguration<Person> 
    { 
     public PersonMapping() 
     { 
      this.HasKey(p => p.PK_Person); 
      this.Property(p => p.PK_Person).IsIdentity(); 
      this.MapSingleType().ToTable("dbo.Person"); //otherwise by convention it is converted to "People" 
     } 
    } 

을 그리고 여기에 우리는 문제가있다. Person 엔티티를 사용하려고하면 엔티티 타입 'KDC.Model.Entities.BaseEntity'에 대한 키를 유추 할 수 없습니다. '입니다. ObjectContext가 기본 클래스에 기본 키를 정의해야한다고합니다. 실험 목적으로 BaseEntity에서 PK 필드 정의를 이동할 때 모든 것이 잘 동작했기 때문입니다. 그러나 우리의 경우에는 불가능합니다. 왜냐하면 각 테이블마다 기본 키 필드 이름이 다릅니다.

나는 길을 모르고 어디에서 잘못 되었습니까! 제발, 도와주세요 !!!

+0

흠 ... 나는 CTP3이 문제가 기억하지 않습니다. 불행히도 아직 CTP4로 놀 기회는 없었습니다. – djskinner

+0

Huyrua가 구현 한 리포지토리 patern - 어셈블리에 포함 된 엔티티가 식별되어 컨텍스트에 자동으로 추가되는 방법이 있습니다. –

답변

1

MapSingleType을 사용하는 대신 MapHierarchy를 사용하고 필드를 지정하십시오.

를 들어
modelBuilder.Entity<Person>().MapHierarchy(p => new { p.PK_Person, p.PersType, p.Name, p.eMail, p.InsertDate, p.PK_InsertUserAccount, p.TimeStamp}).ToTable("Persons");