2017-12-31 19 views
0

.NET API에 프런트 엔드 각 프레임 워크와 결합 된 기본 엔터티 클래스가 있습니다. 프로젝트와 회사라는 두 가지 수업이 있습니다. 프로젝트를 만들 때 회사를 지정해야합니다. 회사는 POST 요청을 프로젝트 컨트롤러에 보낼 때 저장되지 않습니다.기본 Entity Framework 웹 API : INSERT 문이 FOREIGN KEY 제약 조건과 충돌했습니다.

클래스는 다음과 같습니다

public class Project 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public Company Company { get; set; } 
    public Contact Contact { get; set; } 
    public User2 User { get; set; } 
} 

컨트롤러 방법은 다음과 같습니다 회사, 연락처, 사용자의 id의이 왜

// POST: api/Projects 
    [ResponseType(typeof(Project))] 
    public IHttpActionResult PostProject(Project project) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 
     db.Projects.Add(project); 
     db.SaveChanges(); 
     return CreatedAtRoute("DefaultApi", new { id = project.Id }, project); 
    } 

json으로 POST 데이터가 여기

{ 
    "name":"project name", 
    "description":"text description", 
    "company":{"id":"1"}, 
    "contact":{"id":"1"}, 
    "user":{"id":"1"} 
} 

입니다 외래 키 테이블을 업데이트하지 않습니까? 외장 키를 저장하기 위해 컨트롤러 메소드에 전달하기 위해 필요한 값은 무엇입니까?

답변

0

다시 필요한 경우. 관련 엔티티는 저장하기 전에 db 컨텍스트에 의해 검색되어야합니다. 그렇지 않으면 새로운 관련 엔티티가 작성됩니다. ID 만 속성으로 전달하면 db에서 관련 엔터티를 먼저 검색하십시오.

// POST: api/Projects 
    [ResponseType(typeof(Project))] 
    public IHttpActionResult PostProject(Project project) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 
     db.Projects.Add(project); 
     project.Company = db.Companies.First(x => x.Id == project.Company.Id); 
     project.User = db.User2.First(x => x.Id == project.User.Id); 
     project.Contact = db.Contacts.First(x => x.Id == project.Contact.Id); 
     try 
     { 
      db.SaveChanges(); 

     } 
     catch (Exception e) 
     { 
      Debug.Write(e); 
     } 
     return CreatedAtRoute("DefaultApi", new { id = project.Id }, project); 
    } 
1

외래 키는 값이 상위 테이블의 값에 따라 달라짐을 의미합니다. 의미, 부모 테이블에서 의존하는 열을 삽입 할 값입니다.

Tutorials Point에서 :

외부 키는 두 개의 테이블을 연결하는 데 사용되는 키입니다. 이것은 이며 참조 키라고도합니다.

외부 키는 값이 인 열 또는 열의 조합으로 다른 테이블의 기본 키와 일치합니다.

두 테이블 간의 관계는 두 번째 테이블에 외래 키가있는 테이블 중 하나의 기본 키와 일치합니다.

테이블에 기본 키가 정의되어있는 경우 필드의 값이 동일한 두 개의 레코드를 가질 수 없습니다.

그래서 문제를 해결하고 코드를 수정하려면 열이 상위 테이블에서 사용하는 기본 키의 값을 알아야합니다.

따라서 제약 조건 오류가 있습니다.

+0

설명해 주셔서 감사합니다. 그건 내가 문제를 이해하는 데 약간 도움이된다. Entity Framework는 프로세스의 자동화 된 부분을 가지고 있어야하지만 설치 방법을 분명히 알지 못합니다. 엔티티가 외래 키를 찾는 것을 자동화하는 방법에 대한 아이디어? –

관련 문제