Pregunta

Estoy usando eliminación suave en mi base de datos (campo IsDeleted). Estoy usando activamente métodos LoadWith y AssociateWith para recuperar y filtrar registros anidado.

Lo que pasa es AssociateWith sólo funciona con propiedades que representa una relación de uno a muchos.

DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<User>(u = > u.Roles);
loadOption.AssociateWith<User>(u = > u.Roles.Where(r = > !r.IsDeleted));

En el ejemplo anterior acabo de decir:. Quiero recuperar a los usuarios con funciones relacionadas (no borrados)

Pero cuando tengo uno-a-uno, por ejemplo, Document -> File (el único archivo está relacionado con el documento) Soy incapaz de filtro suave suprime el objeto:

DataLoadOptions loadOptions = new DataLoadOptions();
loadOption.LoadWith<Document>(d = > d.File);
// the next certainly won't work
loadOption.AssociateWith<File>(f = > !f.IsDeleted);

Entonces, ¿hay alguna idea de cómo filtrar registros dentro de la relación uno-a-uno?

Gracias!

¿Fue útil?

Solución

Hasta ahora he encontrado que una solución adecuada para esto (aparte de no utilizar eliminaciones suaves en absoluto.): Eliminar la relación suave eliminación en la actualización entidad

por ejemplo. cuando decidí eliminar un archivo de documento, realizo algo como:

// this may be a part of update method
var file = document.File;
if (file.IsDeleted)
{
    // attach soft deleted file
    context.Files.Attach(file, true); 

    // remove a file reference
    document.File = null;
}

// attach document entity and submit changes
context.Documents.Attach(document, true);
context.SubmitChanges();

Por lo tanto, esto puede ser un sustituto de uno-a-uno el filtrado de recuperación de datos complejos.

Otros consejos

quizás tratar:

loadOptions.AssociateWith<File>(f => f.IsDeleted ? null : f);

Esto le dará nulo en lugar de los archivos donde IsDeleted es cierto.

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