1

나는 EF 4.1 코드 첫 번째 버전의 전자 상거래 데이터베이스를 앞두고 터벅 터벅 걷고 있습니다. 지금은 다른에서 다운로드에 대한 외부 키를 배치 한엔티티 프레임 워크 4.1 외래 키 질문

class Download 
{ 
    int ID 
    string Mime 
    string Filename 
    string Extension 
} 

class DownloadBinary 
{ 
    int ID 
    int DownloadID 
    Download Download 
    byte[] Binary 
} 

class DownloadURL 
{ 
    int ID 
    int DownloadID 
    Download Download 
    string URL 
} 

을 :

나는 고려 나는 정당,하지만 확실하지 않다 생각 상황 ..

에 왔어요 기본적으로 널을 제거하고자하는 두 개의 클래스. 또한 Download 클래스 당 여러 DownloadBinary 및 DownloadURL 클래스를 허용하는 부산물이 있습니다. 그러나 이것은 Download 클래스가 DownloadBinary 및 DownloadURL 클래스를 캡슐화하지 않기 때문에 EF 관점에서 볼 때 잘못된 방향으로 보입니다.

DbContext를 검색하고 주어진 Download 클래스 ID에 대해 DownloadBinary 및 DownloadURL 클래스를 회수 할 수 있다는 것을 알고 있으므로 데이터를 가져올 수 있습니다.

나는 다운로드 클래스에 DownloadBinary ID 및 DownloadURL ID를 보유하는 경우, 내가이 방법을 수행하기위한 내 지점 인, 널 (null)의 대상이 될 수 있습니다 ..

정말 한 제로에 시행 할 것으로 예상하고있어 또는 Download from DownloadBinary 또는 DownloadURL 클래스 중 하나를 내 데이터 입력 폼에 입력하십시오 ..

여기에는 많은 문제가 보이지 않지만 경험이 많은 사람들은 어떻게 생각합니까 ??

답변

1

모두 DownloadBinaryDownloadUrl에서 제거 DownloadIDDownloadID에 외부 키로 이러한 클래스의 ID 매핑합니다. EF는 고유 키를 지원하지 않기 때문에 기본 키보다 일대일 관계 만 지원합니다. modelBuilder.Entity() .Property (dB => db.ID) .HasDatabaseGeneratedOption (DatabaseGeneratedOption.None : 자신의 ID가 Download에 의해 정의되어 있기 때문에

modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadBinary) 
      .WithRequired(db => db.Download); 


modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadUrl) 
      .WithRequired(du => du.Download); 
모두 DownloadBinary

DownloadUrl은 데이터베이스에 자동 생성 된 ID를 사용하지 않아야합니다);

modelBuilder.Entity<DownoladUrl>() 
      .Property(du => du.ID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

너는 남자 야 !! : D 고마워, 그 방법은 내가 필요한 것만 소리를 낸다 : D –

+0

wierd, 외래 키 제약 조건을 언급하지 않겠는가? 어떤 아이디어? –

+0

어떤 오류가 발생 했습니까? –

관련 문제