저는 몇 달 동안 ASP.NET MVC 응용 프로그램을 작성했습니다. 처음 작업을 시작했을 때 Entity Framework 4.3 (코드 - 첫 번째 마이그레이션)을 사용했습니다. 내가하는 동안 내 MainClient 테이블에서 업데이트를 시도하는 몇 가지 문제가 발생했습니다. MainClient는 클라이언트의 모든 기본 정보를 포함하며 BP 클라이언트 테이블에 대한 1 : 1 관계를 가지고 있습니다. 여기에는 BP 모듈에 대한 사용권 계약과 관련된 클라이언트에 대한보다 구체적인 정보가 들어 있습니다. 둘 다 탭 컨트롤의 동일한 페이지에서 편집 할 수 있습니다.Entity Framework 4.3 vs. 5.0 차이점 업데이트
System.InvalidOperationException : An object with the same key already exists
in the ObjectStateManager. The ObjectStateManager cannot track multiple objects
with the same key.
내가 내 컨트롤러 클래스에 갔을 때 객체 자체가 분리를 고려하고 디버깅하는 동안주의 : 그러나, 나는 EntityState.Modified되기에 MainClient 개체의 EntityState를 변경하려고 다음과 같은 예외가 점점에 보관 구원 받는다. 이 문제의 해결 방법은 this blog post 및 this SO question에있는 문제와 유사한 해결책을 적용했습니다. 여기에 다시 부착 개체에 대한 코드 편집 방법은 client
라는 MainClient 객체에 전달되는 주어진 (지저분한, 내가 아는) 이후에보고하는 방법은 다음과 같습니다
var newClientObject = new MainClient { ClientID = client.ClientID };
Db.MainClients.Attach(newClientObject);
Db.Entry(newClientObject).CurrentValues.SetValues(client);
var bpClient = new BPClient { ClientID = client.ClientID, BaseClient = newClientObject };
if (client.BPClient != null)
{
Db.BostonpostClients.Attach(bpClient);
Db.Entry(bpClient).CurrentValues.SetValues(client.BPClient);
}
Db.SaveChanges()
이 모든 테스트 케이스를 통해 잘하고 멋쟁이했다. 최근까지.
최근에 Entity Framework 5 (여전히 Code-First 사용)를 사용하도록 응용 프로그램을 업그레이드했습니다. MainClient 편집 페이지를 다시 테스트 할 때 오히려 엉뚱한 동작을 발견했습니다. 일부 필드는 편집 할 때 문제없이 저장됩니다. 다른 사람들은 DB에 절대로 커밋되지 않습니다. 그래도 다른 것들은 편집 할 대상의 유일한 부분 인 경우에만 계속 유지됩니다. 컨트롤러 클래스에있는 DbContext를 디버깅하여 페이지에서 컨트롤러 클래스로 전송 된 변경 사항이 아니라 ObjectStateManager에 MainClient 및 BPClient 개체가 모두 포함되어 있다는 사실을 발견했습니다. 그것은 뿐만 아니라 페이지에서 변경되었습니다! 여기서는 디버깅 중에 하나의 오류가 발생하지 않았 음을 언급해야합니다. SaveChanges() 후에도 오류가 발생하지 않습니다.
내가 시도하고 원래 있던 것과 코드를 복귀하기로 결정, 그것은 그 일의 논리적 인 방법으로 말을하는 것입니다 :Db.Entry<BPClient>(client.BPClient).State = EntityState.Modified;
Db.Entry<MainClient>(client).State = EntityState.Modified;
Db.SaveChanges();
을 그리고 지금은 완전히 잘 작동합니다. InvalidOperationException이 없습니다. 그래서 그게 잘 해결되었습니다.
내게 아직도 괴로운 점은 5.0에서 변경된 기능으로 내 이전 수정본이 작동을 멈추고 나를 괴롭히는 것입니다. 이 코드가 4.3에서 제대로 작동했지만 5.0에서 제대로 작동하지 않은 이유는 무엇입니까? 5.0에서 그 코드가 너무 엉뚱한 데이타베이스에 무엇이 커밋 되었습니까?
왜 이런 일이 일어 났을까요?
도움이 될 수 있습니다. Entity Framework 5 EF 4.3에서 열거 및 이동 솔루션 http://thedatafarm.com/blog/data-access/video-entity-framework-5-enums-and-moving-solution-from-ef-4-3/ – Aru