c# - problemas - marco logico ejemplos practicos
Desactivar el seguimiento en el modelo de marco de entidad primero (2)
Estoy intentando recibir una entidad y luego actualizarla, pero quiero obtenerla sin seguimiento, por lo que puedo adjuntarla de nuevo al contexto.
Tengo el EntityFramework.dll
referenciado (4.1). Generé la base de datos del modelo. (no el código primero).
Obtener usuario:
db.Users.MergeOption = MergeOption.NoTracking;
IQueryable<User> query = db.Users;//.AsNoTracking(); //<-- apparently, this is code-first only.
return query;
Actualizar usuario:
db.Users.Attach(user); //error here.
ObjectStateEntry entry = db.ObjectStateManager.GetObjectStateEntry(user);
entry.SetModifiedProperty(propertyName);
db.SaveChanges();
return user;
Error:
Ya existe un objeto con la misma clave en el ObjectStateManager. El ObjectStateManager no puede rastrear múltiples objetos con la misma clave.
Yo llamo al método así:
var user = userRepository.GetUsers().FirstOrDefault(u => u.UserId == userId);
user.Identifiers.Add(someIdent);
userRepository.UpdateUser(user);
Consultas sin seguimiento En ocasiones, es posible que desee consultar las entidades, pero el contexto no las puede rastrear. Esto puede resultar en un mejor rendimiento al consultar un gran número de entidades en escenarios de solo lectura. El método de extensión AsNoTracking ejecuta una consulta y devuelve los resultados sin rastrearlos en el contexto. En el siguiente ejemplo, las consultas devolverán objetos pero el contexto no los rastreará. otro
// Query for all departments without tracking them
var departments1 = context.Departments.AsNoTracking().ToList();
// Query for some departments without tracking them
var departments2 = context.Departments
.Where(d => d.Name.StartsWith("math"))
.AsNoTracking()
.ToList();
En lugar de desmontar y unir. Si desea manejar Actualizar un elemento que puede o no ser del contexto original, puede hacer lo siguiente.
var originalItem = db.Users.Find(user.UserId);
db.Entry(originalItem).CurrentValues.SetValues(user);
db.SaveChanges();