내가 MVC 웹 API를위한 백엔드로 엔티티 프레임 워크를 사용하는 경우 하나의 컨트롤러이 (빠른 모형)과 같이 보일 수 있습니다엔티티 프레임 워크, 방지 중복 기록, 동시 연결
public class PersonController : ApiController
{
[HttpPost]
public void AddPerson(Person val)
{
DbContext context = new DbContext();
if(!context.Persons.Any(x=>x.Email == val.Email))
{
context.Persons.Add(val)
context.SaveChanges();
}
}
}
그 경우이되는 문제 작업은 몇 초에 50 번, 100 번 (아마 좋은 예가 아님) 호출되었지만 동일한 전자 메일 주소로 여러 항목을 추가 할 가능성이 높습니다.
val
매개 변수 Person
의 목록라면 당신은 다른 소스에서 전화를 많이해야 할시기를 SaveChanges()
하지만이 작동하지 않습니다하기 전에 누군가가 이메일 주소가 첨가 된 있는지 확인하기 위해 changetracker
을 확인할 수 있습니다.
정적 인 DBContext
을 사용할 수 없으므로 사용 중이라고 말하는 예외가 발생합니다.
내가 생각했던 한 가지 생각은 동일한 설정 이었지만 dbcontext
의 인스턴스 (동일한 인스턴스)를 반환하지만 lock()
과 같은 종류의 대기열을 만드는 정적 방법은 있지만 성능이 좋지 않을 수 있습니다. 좋은 생각이야.
어떻게이 문제를 해결할 수 있습니까?
이 예제는 내가하는 일과 관련이 없지만 시나리오를 설명하기에 간단한 내용입니다. 너무 구체적 일 필요는 없습니다.
감사
스티브
새로운 사람을 독특하게 만드는 것은 무엇입니까? 동일한 전자 메일 주소를 가진 여러 사람이 허용됩니까? 아니면 이메일 속성에 대한 고유 한 제약 조건이 도움이 될 것입니다. 또한 중복 된 정보로 왜이 연산이 자주 호출되는지 이유를 고려해야합니다. – elolos
나는 중복을 막을 필요가 없다. 나는 0.00001ms 전에 만들었던 기존 링크를 끌어 와서 새로운 레코드에 링크해야 할 수도있다. 이 예제는 분명히 최고는 아니 었습니다. –