2013-05-09 2 views
0

엔티티 프레임 워크에 0..N 등 같은 MS SQL Server 테이블 구조 : 0으로 레코드를 추가하는 방법 : 우리는이 5

Table Org { 
    Id Int 
    Name Varchar(50) 
} 

Table Request { 
    Id Int 
    Name Varchar(50) 
    OrgId int Not Null 
} 

우리의 모델

는 다음과 같이 :

public class Org 
{ 
    public int Id { get; set;} 
    public string Name { get; set;} 
    public List<Request> Requests { get; set;} 
} 

public class Request 
{ 
    public int Id { get; set;} 
    public string Name { get; set;} 
    public int OrgId { get; set;} 
} 

그리고 우리의 구성은 같다 :

public class RequestConfiguration : EntityTypeConfiguration<Request> 
{ 
    public RequestConfiguration() 
    { 

     HasRequired(o => o.Org) 
      .WithMany(o => o.Requests) 
      .HasForeignKey(o => o.OrgId); 
    } 
} 

나는 새로운 요청 인스턴스를 만들고, 그것으로 조직을 할당 갈 때마다, 그것은 조직의 TABL에 새 레코드를 생성 e - 상관없이. 동일한 dbcontext에 있습니다. 구성에서 다양한 매핑을 시도했지만 동일한 결과가 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

감사합니다.

답변

0

Org이 이미 있음을 EF에 알려야합니다. 그렇지 않으면 EF는 Org이 새로운 것으로 가정하고 데이터베이스에 삽입하려고합니다. 데이터베이스에서 기존 Org로드 중 하나 또는 컨텍스트에 부착하여 작업을 수행 할 수 있습니다 :

using (var context = new MyContext()) 
{ 
    var newRequest = new Request(); 

    var existingOrg = new Org { Id = existingOrgId }; 
    context.Orgs.Attach(existingOrg); 
    // or instead of the previous two lines: 
    // var existingOrg = context.Orgs.Find(existingOrgId); 

    newRequest.Org = existingOrg; 

    context.Requests.Add(newRequest); 
    context.SaveChanges(); 
} 

이 기존 Org-OrgId 다스의 외래 키와 함께 새로운 Request을 삽입합니다.

실제로 외래 키 속성이 있기 때문에 Org 인스턴스가 전혀 필요하지 않습니다. FK 값을 설정할 수 있습니다.

var newRequest = new Request(); 

    newRequest.OrgId = existingOrgId; 

    context.Requests.Add(newRequest); 
    context.SaveChanges(); 
+0

아, 조직 측의 연결이 누락되었습니다. 고맙습니다! – TheNerd

관련 문제