개체를 가져 와서 NoTracking을 사용하여 변환하고 조작 한 다음 asp.net MVC보기로 보냅니다. 내가 편집 된 버전을 다시 얻을, 그것을 첨부하려고, 내 저장소에 편집 메서드를 호출하여, 다음과 같은 오류가 발생합니다 :엔터티 프레임 워크에서 개체를 분리하고 첨부 할 때 오류가 발생했습니다.
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
나는 데이터를 얻을 방법 :
IQueryable<User> query = db.Users.AsNoTracking();
어떻게 I 내가 AsNoTracking
를 사용하여 개체를 얻을 때 그 날의 일을 분리해서는 안
public User UpdateUser(User user, IEnumerable<Expression<Func<User, object>>> properties)
{
db.Users.Attach(user); //Error happens right here.
foreach (var selector in properties)
{
string propertyName = Helpers.PropertyToString(selector.Body);
db.Entry(user).Property(propertyName).IsModified = true;
}
db.SaveChanges();
return user;
}
: 데이터를 편집? 분리되지 않은 경우에도 asp.net 수명주기 전체가 데이터를 다시 제출하면 다시 시작되어 그래프가 비어있게됩니다.
내가 뭘 잘못하고 있니?
나는 이런 식으로 내 바인딩을 수행
DbContext db = new DbContext("ConnStringName");
Bind<IUserRepository>().To<SqlServerUserRepository>()
.WithConstructorArgument("db", db);
사용자 개체에 어린이 컬렉션이 있습니까? 나는 최근에 두 개의 새로운 자식으로 부모 객체를 연결하면이 오류가 발생하는 문제가 발생했습니다. 아이들은 모두 ID 필드가 null이어서 "동일한 키"오류가 있습니다. –
@Ed Chapel 'UpdateUser' 메소드에 보낸 것이 아닙니다. 모델에는 예가 있지만 데이터베이스에 이미 있습니다. –
확인. db 컨텍스트가 세션이나 응용 프로그램에 저장되어 있습니까? 또는 모든 요청에 대해 새 인스턴스를 만드십니까? –