LINQ to SQL diferidos Carregando
-
12-09-2019 - |
Pergunta
DBML
Eu tenho as seguintes entidades no meu dbml: (feita para um exemplo)
Book <- Media -> AuthorsForMedia <- Author
As setas são as relações no meu dbml.
Um livro é um tipo de mídia, e uma instância de um livro tem uma propriedade de mídia com os valores comuns a todos os meios nele. AuthorsForMedia é uma tabela de interseção com um AuthorID, um MediaId, e um AuthorsForMediaId.
Consulta ??h2>
Meu consulta get no meu repositório é:
public Book Get(int id)
{
var query = from b in db.Books
where b.BookId == id
select b;
return query.Single();
}
O objeto resultante tem as propriedades do catálogo estabelecidos, e propriedades de mídia com todos os seus valores definidos.
Quando eu olho para AuthorsForMedia no diálogo Assista durante a depuração, os seguintes valores são definidos:
Count = 0
HasLoadedOrAssignedValues = false
IsDeferred = false
Pergunta 1
Por que não os valores para AuthorsForMedia (e, em seguida, seu correspondente propriedade autor) ser avaliada com carregamento lento?
coisas que eu tentei
Depois de ler esta pergunta:
Eu tentei os DataLoadOptions com LoadWith / AssoicateWith e não funcionou. Acabei com erros como
- Não é possível criar instância de erro class Foo: System.NotSupportedException: Subquery não é suportada em mídia do tipo Livro
- ... System.InvalidOperationException: A expressão especificada deve ser do P.A forma, onde p é o parâmetro e A é um membro propriedade ou campo
- Ou o valor não estava lá
Eu posso fornecer trechos de código para tudo isso se isso ajuda, mas eu acho que é uma questão conceitual e não uma sintática.
Resumo
Como devo ser recuperar esses valores, deve ser uma associação à esquerda, ou qualquer outra coisa que eu não encontrei até agora?
Solução
Esta é a forma como o LoadWith deve olhar.
DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<Books>(book => book.AuthorsForMedia);
db.LoadOptions = dlOptions;
Outras dicas
DataLoadOptions e LoadWith () é o que você precisa.
Como você está chamando-los?