¿Hay alguna manera de determinar si un objeto LINQ no se ha insertado aún en la base de datos (nuevo) o se ha modificado desde la última actualización (sucia)? Planeo encuadernar mi UI a objetos LINQ (usando WPF) y necesito que se comporte de manera diferente dependiendo de si el objeto ya está en la base de datos.LINQ to SQL - Seguimiento de objetos nuevos/sucios
MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
obj = new MyObject();
else
obj = context.MyObjects.First();
// How can I distinguish these two cases?
La única solución simple que puedo pensar es para establecer la clave primaria de nuevos registros a un valor negativo (mis PK son un campo de identidad y por lo tanto pueden ajustar a un número entero positivo en INSERT
). Esto solo funcionará para detectar nuevos registros. También requiere PK de identidad y requiere el control del código que crea el nuevo objeto.
¿Hay una mejor manera de hacerlo? Parece que LINQ debe realizar un seguimiento interno del estado de estos objetos para que pueda saber qué hacer en context.SubmitChanges()
. ¿Hay alguna forma de acceder a ese "estado del objeto"?
aclaración Aparentemente mi pregunta inicial fue confusa. No estoy buscando una forma de insertar o actualizar registros. Estoy buscando un camino, dado cualquier objeto LINQ, para determinar si ese objeto no se ha insertado (nuevo) o si se ha cambiado desde su última actualización (sucio).
Esto no es exactamente lo que estoy buscando. Sé cómo insertar/actualizar usando LINQ. Lo que necesito es determinar el estado de cualquier objeto LINQ dado. –