2016-10-10 9 views
0
내가 처음 EF 코드를 사용하고

, 나는 다음과 같은 한 개체 :ReferentialConstraint의 종속 등록 정보가 상점 생성 컬럼에 맵핑됩니다. TPT 상속에서 열 '아이디'

enter image description here

내가 만들 상속 TPT 방법을 사용하고

을 일대일 또는 제로의 관계

var pi = new ProductionInstruction(); 
/* set pi properties */ 
ctx.ProductionInstructions.Add(pi); 
ctx.SaveChanges(); 
: 나는 ProductionInstruction을 저장하는 코드를 다음 쓰기

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Order>() 
       .HasOptional(x => x.ProductionInstruction) 
       .WithRequired(x => x.Order); 
} 

: 다음 코드를 작성

ctx.SaveChanges() 실행이 때 나는 오류를 다음 얻을 :

ReferentialConstraint에 종속 속성은 가게에서 생성 된 컬럼에 매핑됩니다. 칼럼 : '이드'.

위의 오류없이 내 두 엔티티간에 1..0-1을 구현하는 방법이 있습니까?

+0

'/ * set pi properties * /'에 주문 링크가 있습니까? 있어야합니다. –

답변

3

엔티티 프레임 워크에서 필수 주체와 일대일 매핑은 종속 개체에 주체의 외래 키이기도 한 기본 키를 제공하여 구현됩니다. 종속은 프린시 펄에서 기본 키를 복사합니다.

귀하의 경우 EF는 ProductionInstruction.IdOrder.Id에 대한 외래 키로 지정하고 그 값은 속한 Order에서 복사해야합니다. 그러나 상속 때문에 ProductionInstruction.Id은 식별 열 (저장소 생성)이므로 코드에서 설정할 수 없습니다.

상속을 제거해야하므로 ProductionInstruction.Id을 상점 생성되지 않음으로 매핑하거나 매핑을 양면에서 선택적으로 변경할 수 있습니다. 후자는 ProductionInstructionOrder에 대한 별도의 외래 키를 제공합니다.

+0

두 번째 솔루션에서'modelBuilder.Entity () .HasOptional (x => x.ProductionInstruction) .WithOptionalPrincipal (x => x.Order)'를 사용한다는 의미입니까? – Masoud

+0

예, 그게 전부입니다. –