entity-framework - first - entity framework example
Entity Framework-Separar y mantener el gráfico de objeto relacionado (4)
Consulte http://www.codeproject.com/KB/architecture/attachobjectgraph.aspx
Esta es una solución increíble y puede ser útil: tenga en cuenta que el autor también tiene una versión actualizada en su propio blog: http://www.codetuning.net/blog/post/Entity-Framework-reattaching-entity-graphs- (3) .aspx
Pablo
Acabo de empezar a usar Entity Framework en lugar de mi NHiberante normal para ver cómo funciona EF y hasta ahora estoy teniendo muchos problemas, pero uno en particular es separar un objeto y mantener los objetos secundarios relacionados.
Compré el libro O''Reilly Entity Framework que dice "sí, el marco de la entidad por defecto no mantiene el gráfico de objetos cuando se separa", ¡pero no muestra cómo guardar el gráfico! Gracias O''Reilly eso es realmente útil.
De todos modos, si alguien puede ayudar, sería genial, codifique a continuación:
using (var creativeWorkshopEntities = new CreativeWorkshopEntities())
{
var q = from c in creativeWorkshopEntities.Job.Include("Files")
where c.Id == jobId
select c;
var job = q.First();
creativeWorkshopEntities.Detach(job);
return job;
}
¡Gracias!
Dan
En EF5, MergeOption ya no está en el nivel DbSet. Entonces de acuerdo con esto: http://msdn.microsoft.com/en-us/data/hh949853.aspx
Si desea hacer una consulta de seguimiento no tendrá que hacer algo como:
var q = from c in creativeWorkshopEntities.Job.AsNoTracking().Include("Files")
where c.Id == jobId
select c;
Intente utilizar una consulta NoTracking en su lugar. De esta forma, los objetos nunca se adjuntan, por lo que no es necesario ''separar'', que es cuando el gráfico se tritura:
es decir
using (var creativeWorkshopEntities = new CreativeWorkshopEntities())
{
creativeWorkshopEntities.Job.MergeOption = MergeOption.NoTracking;
var q = from c in creativeWorkshopEntities.Job.Include("Files")
where c.Id == jobId
select c;
var job = q.First();
return job;
}
Espero que esto ayude
Alex
(Administrador del programa Entity Framework Team)
use el código siguiente para mantener objetos relacionados en la memoria.
using (var creativeWorkshopEntities = new CreativeWorkshopEntities())
{
var q = from c in creativeWorkshopEntities.Job.Include("Files")
where c.Id == jobId
select c;
var job = q.First();
return (Job)Detach(job);
}
private Object Detach(Object object)
{
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, dbo);
stream.Position = 0;
return formatter.Deserialize(stream);
}
}