0

오늘 이전 게시물에 이어 :0..1에 관계

: 지금 다음과 같은 관계를 구성하기 위해 노력하고있어

Entity framework one to zero or one relationship without navigation property

Understanding ForeignKey attribute in entity framework code first

Item1에는 RawData 옵션이 있습니다. Item2에는 RawData 옵션이 있습니다. Item3에는 RawData 옵션이 있습니다.

RawData는 Item1, Item2 또는 Item3 중 하나에 첨부되어야합니다. 자체적으로 존재할 것으로 예상되지는 않습니다.

현재 구조는 다음과 같습니다

나는이를 사용하여 구성 할 거라고 생각
class ItemX 
{ 
    [Key] 
    public int Id { get; set; } 

    public int? RawDataId { get; set; } 
    [ForeignKey("RawDataId")] 
    public virtual RawData RawData { get; set; } 
} 

public class RawData 
{ 

    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    //other properties 
} 

:

modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true); 
modelBuilder.Entity<Item2>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true); 
modelBuilder.Entity<Item3>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true); 

을하지만 이것은 다음과 같은 오류 준 :

The ForeignKeyAttribute on property 'RawData' on type 'Item1' is not valid. The foreign key name 'RawDataId' was not found on the dependent type 'RawData'.

이이 같은입니다 오류 나는 오늘 이전 게시물에서 다루고 있었다. 그 중 하나에서 공유 기본 키로 인해 작동하지 않는 이유를 이해합니다. 하지만이 예제에서는 RawData가 Item1과 기본 키를 공유 할 수 없으므로 Item2는 동일한 ID를 가질 수 있습니다.

도움 주셔서 감사합니다.

편집

나는 그것을 사용하여 작업있어 :

modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithMany().HasForeignKey(d=>d.RawDataId).WillCascadeOnDelete(true); 
//etc. 

데이터베이스가 좋아 보인다. WithMany와 같이 묘사되는 조금 이상한 것 같지만 어쩌면이 때 여러 관계가 필요한 무엇입니까 ??

답변

0
당신은 RawDataclass에서 항목 1, 항목 2와 항목 3을 포함 할 필요가

:

public class RawData 
{ 

    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public virtual Item1 i1 {get;set;} 
    public virtual Item2 i2 {get;set;} 
    public virtual Item3 i3 {get;set;} 
    //other properties 
} 
+0

나는이 관계를 정의하지만 탐색 속성이 없었다면 불가능합니다 도움이 어떻게 볼 수 있습니까? – Mark007

+0

유창한 API에서 WithMany()로 설명하면 문제가없는 것 같습니다. – Mark007

+0

익숙해지기는 좀 이상하지만 시도해보십시오. 효과가있을 것입니다. 유창한 API에는 코드가 필요하지 않습니다. – pquest