Pregunta

Estoy trabajando con Entity Framework 4 (el uso de las entidades self-tracking), y acceso a una vista, que es la combinación de dos tablas.Así que cuando me actualización de la información de la vista, tengo que enviar el STE de la vista para el repositorio de que el acceso a la base de datos.

He hecho lo siguiente:

Cuando voy a recibir mi punto de vista con la información actualizada, puedo crear mi STE1 y STE2.¿Cuando puedo crear un STE, este se crea con un añadido de estado.Entonces, ¿cómo puedo saber el estado de la STE de la opinión de que el estado es modificado, puedo cambiar el estado de mis dos STEs con el método MarkedAsModified.

Entonces, ¿cómo tengo en el STE de la vista de la información de las dos tablas, yo paso de la información desde el punto de vista de la correcta STE, y aplicar los cambios de la STE a el objectContext.

Finalmente hago la saveChanges.Pero en este paso que voy a recibir una Optimistic concurrency exception.Creo que es porque La STE pasar desde el estado a Added a Modified por lo que el contexto detecta que hay alguna modificación entre la creación y la SaveChanges, pero también trato de AcceptChanges en el STE, marcaron como modificado y, aplicar los cambios y, finalmente, SaveChanges, pero el problema persiste.

¿Cómo puedo solucionar el problema?hay una mejor manera de trabajar con la vista y Entity Framework v4?

Gracias.Daimroc.

EDIT 1:Todavía tengo problemas.Mi código es el siguiente:

Componentes myComponent = nuevos Componentes();//este es un STE micomponente.Rereference = mivista.De referencia;...//otras propiedades micomponente.MarkedAsModified();//esto es necesario porque quiero actualizar a la información, sin agregar un nuevo registro.myContext.ApplyChanges("Componentes", myComponent);miContexto.SaveChanges();

En el saveChanges, tengo la excepción:update, insert o delete afectado a un inesperado número de filas (0).Las entidades pueden haber sido modificado o eliminado ya que las entidades se han cargado.Actualización ObjectStateManager entradas.

Cual es el problema?no puedo modificado un nuevo STE creado?

Gracias.

¿Fue útil?

Solución

He encontrado la manera de resolver el problema.

En una primera solución, la solución fue hacer una consulta a la base de datos para obtener los registros existentes en la base de datos.Este complemento de las entidades en el contexto y, a continuación, es posible modificar sus datos, y guardar los cambios correctamente.

Pero más tarde, encontré la manera de evitar que el necesario para hacer la consulta de la base de datos para agregar la modificación de las entidades en el contexto.

La forma es utilizando el siguiente código:

Customers myCustomer = new Customers  { IDCustomer = myCustomer.IDCustomer };
myContext.Customers.Attach(myCustomer);

//update the data of the entity.

myContext.SaveChanges();

La solución es crear una nueva entidad configuración de la clave principal.Si la entidad hubiera FK sería indicado en la misma forma.En este punto, la entidad ha estado agregado.

Más tarde, se adjunta el contexto, y entonces puede ser modificado.Cuando un campo es cambiado, la entidad cambia su estado a modificado, así que cuando la saveChanges() es llamado, EF actualización de la entidad, no intente agregar una nueva.

Puedo encontrar esta información en este enlace.En este post la solución es la eliminación de una entidad sin recuperar a la base de datos, sino que la idea funciona también si queremos modificar un registro existente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top