Игнорировать свойства класса, доступные только для чтения, при использовании DataContext.ExecuteQuery<T>

StackOverflow https://stackoverflow.com/questions/707706

Вопрос

Как указать контексту данных LINQ игнорировать определенные свойства или все свойства, доступные только для чтения, при привязке набора результатов к объекту?

Я работаю с некоторыми операторами T-SQL, которые сложно выразить с помощью LINQ, поэтому я использую метод ExecuteQuery контекста данных для передачи прямого T-SQL в базу данных.

Если мой класс T имеет какие-либо свойства только для чтения, я получаю исключения во время выполнения, когда контекст данных пытается установить эти свойства и терпит неудачу, поскольку нет свойства установки.Как мне сообщить контексту, чтобы он игнорировал эти свойства?

Это то, что я делаю сейчас.Это работает, но это отстой:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
Это было полезно?

Решение

Вы рассматривали Linq to Entities?Возможно, преобразование вашего проекта не стоит усилий, в зависимости от того, насколько далеко вы продвинулись или сколько накладных расходов вас устраивает.Однако именно этот сценарий не будет проблемой в Linq to Entities.Он не пытается обновить свойства объекта, доступные только для чтения, при его загрузке, поскольку они не сопоставлены явно, а являются просто свойствами расширения.

Кроме того, вы можете пойти по пути старой школы/Java, используя функции получения вместо свойств.public bool getIsPaidInFull() {return NetTotal <= 0m;}.

Или вы могли бы поиграться с реализацией свойств только для чтения в унаследованном дочернем классе, но это может привести к разного рода проблемам с типами.

Другие советы

public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top