Pergunta

Como posso dizer a um contexto de dados LINQ para ignorar tanto propriedades específicas, ou todas as propriedades somente leitura, ao vincular um conjunto de resultados para um objeto?

Eu estou trabalhando com algumas declarações T-SQL que são difíceis de expressar usando LINQ, assim que eu estou usando o método ExecuteQuery do contexto de dados para passar o T-SQL diretamente para o banco de dados.

Se a minha classe T tem propriedades de somente leitura, recebo exceções em tempo de execução quando as tentativas de contexto de dados para definir essas propriedades e falha porque não há nenhuma propriedade setter. Como posso saber o contexto para ignorar essas propriedades?

Isto é o que eu estou fazendo agora. Ele funciona, mas é uma porcaria:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
Foi útil?

Solução

Você considerou Linq to Entities? Pode não valer a pena para converter seu projeto, dependendo de quanto tempo você é, ou quanto ORM sobrecarga você está confortável com. No entanto, este cenário exato não seria um problema em LINQ to Entities. Ele não tenta atualização ler apenas as propriedades do objeto quando carregá-lo, porque eles não são explicitamente mapeados, eles são simplesmente propriedades de extensão.

Além disso, você poderia ir a rota old-school / java usando funções getter em vez de propriedades. bool pública getIsPaidInFull () {return NetTotal <= 0m;}.

Ou você pode brincar com a implementação de leitura únicas propriedades em uma classe criança herdou, mas que pode introduzir todos os tipos de questões de tipo.

Outras dicas

public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top