2014-11-20 2 views
1

두 엔티티 모두 업데이트해야합니다.엔티티 프레임 워크로 큰 엔티티와 하위를 저장하십시오.

      Job(PK: Jobid) 
     Holes(PK: Holeid, FK: Jobid)/Orders(PK: Orderid, FK: Jobid) 
Tools(PK: Toolid, FK: Holeid, FK: Orderid)/ToolHoles(PK: Holeid, Orderid) 

도구에도 7 명의 자식이 있습니다.

저장시 작업이 이미 존재합니다. 작업에 이미 각 하위 엔터티가 하나 이상 포함되어 있거나 없을 수 있습니다.

부분 정보가 데이터베이스에 저장되지 않도록이 정보를 모두 한 트랜잭션에 저장할 수 있어야합니다.

현재 모든 관련 정보로 Job 엔티티를 구축하고 SaveChanges를 호출했습니다. 새 엔티티를 추가하는 경우 Jobid를 제외한 모든 키 저장시 키를 생성해야합니다. 나는 가능한 한 달성하려고 노력하고 있습니까?

+1

"EF가 새 키를 추적하고 자녀를 적절히 업데이트합니까?"라고 묻는 경우 대답은 "예"입니다. – MikeH

+0

자녀가 양쪽 부모로부터 새 키를 가져 오는 경우에도? – user3738893

답변

1

여기에 몇 가지 가정을하고 있는데, 내가 기초가 없는지 알려주세요. 시나리오가 아래처럼 보이는 경우에는 정상이어야합니다.

var myHoles = new Holes(); 
var myOrders = new Orders(); 
var myTools = new Tools(); 
var myToolHoles = new ToolHoles(); 

myJob.Holes.Add(myHoles); //myJob already exists 
myJob.Orders.Add(myOrders); 

myHoles.Tools.Add(myTools); 
myOrders.Tools.Add(myTools); 

myHoles.ToolHoles.Add(myToolHoles); 
myOrders.ToolHoles.Add(myToolHoles); 

db.SaveChanges(); 

당신은 "하나의 거래"라고 말하지만 실제로는 여러 거래가 발생합니다.

  • myHolesmyOrders 적절하게 자신의 JobId 세트를 데이터베이스에 삽입됩니다.
  • EF는 자신의 ID를
  • myToolsmyToolHoles이 두 번째 단계에서 발견 된 값으로 HoleIdOrderId 세트로 삽입됩니다 무엇인지 찾을 수 있습니다.
+1

물론 코드를'using'으로 싸서'BeginTransaction()','Commit()','Rollback()'을 사용할 수도 있습니다. –

+0

공구/공구 홀을 구멍과 주문에 모두 매핑해야합니까? 나는 이전에 그것을 시도하고 충돌하는 변화에 대한 오류를 발견했다. – user3738893

+0

지금은 어떻게 연결되어 있습니까? – MikeH

관련 문제