2013-04-11 2 views
1

두 테이블이 있습니다. . 서 테이블 W v 전 테이블. 버전 표에 ID 필드와 documentID 필드가 있다는 점을 제외하고는 모두 identicle입니다. 문서 테이블에는 documentId 필드가 있습니다.Linq 데이터베이스 기본 키 업데이트

문서를 제대로 찾을 수는 있지만 문서에서 ID 필드 대신 ID 필드를 찾으려는 ID가 있기 때문에 버전 표 정보를 찾을 수 없습니다.

public ActionResult ApproveDocument(int id = 0) 
    { 
     IPACS_Document ipacs_document = db.IPACS_Document.Find(id); 
     IPACS_Version ipacs_version = db.IPACS_Version.Find(id); 

     ipacs_version.dateApproved = System.DateTime.Now; 
     ipacs_version.approvedBy = User.Identity.Name.Split("\\".ToCharArray())[1]; 

     ipacs_document.dateApproved = System.DateTime.Now; 
     ipacs_document.approvedBy = User.Identity.Name.Split("\\".ToCharArray())[1]; 
     ipacs_document.revision = ipacs_version.revision; 

     db.SaveChanges(); 

     return RedirectToAction("Approve"); 
    } 

따라서 1130에서 전달 된 ID 때문에 ipacs_document이 올바르게 발견되었습니다. 그러나 ipacs_versiondocumentId 11 대신 id 11을 찾으려고하기 때문에 아무 것도 찾지 못합니다.

+0

.Find (id) 메소드에 익숙하지 않습니다 ... 작성 했습니까? 아니면 자동 생성 되었습니까? – Colin

+0

자동 생성됩니다. –

답변

1

당신은

찾기 방법은 인수로 객체의 배열을 ... Find이 (DbSet <>) composite keys 참여를 유도하기 위해 사용하는 방법에 궁금합니다. 복합 기본 키가있는 을 작업 할 때는 키 값을 쉼표 으로 구분하여 모델에 정의 된 순서대로 전달하십시오.

http://msdn.microsoft.com/en-us/library/gg696418(v=vs.103).aspx

db.IPACS_Version.Find(id, documentid); // mind the order 

그리고 당신은 항상 LINQ 쿼리, Where 예를 사용할 수 있습니다 마음에 아무것도 더 복잡한 킵에 대한

db.IPACS_Version.Where(x => x.Id == id && x.DocumentId == docid && x.Flag == true); 

참고 : 당신은 (관계없이 개체가 어떻게 만들어 지는지에) query, Where 사용할 수 있습니다 -
하지만 keys가 설정되지 않은 경우 (의견에 따라) 제대로 - 나는 당신이 그렇게하는 것을 막을 것입니다. 대신 의 빠른 수정 사항이 필요하므로 테이블, pk-s가 올바르게 설정되어 있는지 확인하십시오 ( ). 그러면 어떤 검색어가 가장 적합한 지 알 수 있습니다 (또는 는 필요한 모든 것이 있으면 찾기 만 사용).

+0

Hrm 데이터베이스가 올바르게 설정되지 않았을까? 버전 테이블에는 ID에 첨부 된 단일 기본 키만 있습니다. –

+0

아마 제임스입니다. 사용중인 엔티티를 업로드하기 만하면됩니다. – NSGaga

+0

이것이 코드 우선이라면 - 나는 그렇다고 가정하고 있지만 당연히 그렇게 할 필요는 없습니다. – NSGaga