2017-10-20 12 views
2

asp net 코어 + ef 코어 2.0 웹 API 프로젝트에서 아래와 같이 정의 된 put 메소드를 사용하고 있습니다.이 엔티티의 각 속성을 하나 그것은 아주 잘 작동, 그래서 정말 문제가없는하지만 난 각각의 특성을 하나 하나 복사 부분을 피하기 위해이 경우 방법이 궁금엔티티 프레임 워크 코어 2 : 쉽게 객체와 그것의 관계를 업데이트하십시오.

public async Task<IActionResult> PutCIApplication([FromRoute] Guid id, [FromBody] CIApplication cIApplication) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != cIApplication.ID) 
     { 
      return BadRequest(); 
     } 

     string userLang = HttpContext.Request.Headers["UserCulture"].ToString(); 
     var dbCIApplication = await _context.CIApplications.Include(c => c.Translations).Include(c => c.DeploymentScenarios).SingleOrDefaultAsync(m => m.ID == id); 

     if (dbCIApplication == null) 
     { 
      return NotFound(); 
     } 

     //Name and Desc are localized properties, they are stored in a collection of Translation with one to many relationship 
     dbCIApplication.Translations[userLang].Name = cIApplication.Name; 
     dbCIApplication.Translations[userLang].Description = cIApplication.Description; 
     dbCIApplication.UpdatedBy = cIApplication.UpdatedBy; 
     dbCIApplication.Status = cIApplication.Status; 
     dbCIApplication.Publisher = cIApplication.Publisher; 
     // And the list goes on... 
     //... and on... 

     _context.CIApplications.Update(dbCIApplication); 

     try 
     { 
      await _context.SaveChangesAsync(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!CIApplicationExists(id)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return NoContent(); 
    } 

.

automapper로 시도했지만 새로운 인스턴스를 생성 할 때 동일한 키를 가진이 유형의 다른 인스턴스가 이미 추적되기 때문에 "추적 할 수 없습니다"오류가 발생합니다.

업데이트 할 개체와 무시할 명부를 전달할 수있는 재사용 가능한 코드를 사용하고 싶습니다. 그러나 나는 그것을 설치하기에 충분한 코더가 아니다. 누군가 멋진 아이디어가 있다면 그것은 최고 일 것이다.

감사합니다.

답변

0

이것은 실제로 디자인을 재고해야 할 시점이지만 실제로 AutoMapper를 사용하고 추적 기능을 끌 수도 있습니다. 이 링크 밖으로

확인 : 귀하의 답변에 대한 https://docs.microsoft.com/en-us/ef/core/querying/tracking

var dbCIApplication = await _context 
       .CIApplications 
       .AsNoTracking() 
       .Include(c => c.Translations) 
       .Include(c => c.DeploymentScenarios) 
       .SingleOrDefaultAsync(m => m.ID == id); 
+0

감사합니다. 이것은 현재이 응용 프로그램의 "v2"이며 현재 asing.net/ef 6에서 asp.net 코어 및 ef 코어 2로 전환하는 데 관여하는 데싱 및 관련 테마를 새로 고치려고합니다. 내 디자인을 다시 생각해야 할 때 내가 생각한 것을 말해 줄 수 있니? 내가 전혀 developper 아니에요 난 단지 구글 복사 붙여 넣기와 커피를 많이 사용하여 코드하려고 해요 :) –