2011-05-04 3 views
1

엔티티 프레임 워크를 사용하고 있습니다.작업자를 삽입 할 때 중복 된 상태 행

노동자를 삽입하기 위해
class Worker { 
    public virtual long workerId {get;set;} 
    public virtual string name {get;set;} 
    public virtual long statusId {get;set;} 
    public virtual Status status {get;set;} 
} 

, 나는 이름, 상태 ID, 심지어 상태를 채우기 (탐색 속성 : 나는 탐색 속성과 작업자 POCO이

Worker(workerId, name, statusId) 

: 나는 노동자 테이블이)와 관련 값을 비교합니다. 그러나 작업자 만 삽입하는 대신 상태를 삽입하고 동일한 상태에 대한 새 행을 만듭니다 (statusId와 상태 개체 내부의 ID를 채우더라도). 이 기록을 삽입 않는 이유

? ..

답변

0

삽입하려면 statusId 만 설정하고 상태를 null로 두십시오.
이렇게하면 중복 연결없이 삽입됩니다.
상태 개체를 채우는 경우 프레임 워크 엔터티는이 개체를 새로운 개체 (또는 행)로 간주합니다.

0

상태가 존재하는 경우에는 해당 ID를 가진 statusid을 설정해야합니다. 또는 해당 상태 개체를 가져 와서 개체 속성에 할당해야합니다.

이전 EF 버전에서는 상태 객체를 가져 오거나 entitykey 값을 status id로 설정해야합니다. 노출 된 외래 키 열이

var myStatus = new Status { statusId = 123, ... }; 
var myWorker = new Worker { status = myStatus, ... }; 

context.Stati.Attach(myStatus); 
context.Workers.Add(myWorker) 

context.SaveChanges(); 

Worker.statusId 경우, 간단히 할 수 있어야한다 : 당신은 새로운 하나를 생성하지 않으려면

+0

상태 ID를 올바른 것으로 설정했습니다. –

+0

statusId를 설정하거나 DB에서 상태 개체를 가져 오는 중 하나를 시도해보십시오. id를 설정하지 말고 동일한 id를 가진 새로운 상태 객체를 할당하십시오. –

0

당신은 상황에에게 상태를 연결할 수 있습니다 새로운 노동자에 할당 :

var myWorker = new Worker { statusId = 123, status = null, ... }; 

context.Workers.Add(myWorker) 

context.SaveChanges(); 

그것은 탐색 속성 statusnull 것을 여기에 중요하다.