Игнорировать свойства класса только для чтения при использовании DataContext.ExecuteQuery <T> - PullRequest
9 голосов
/ 02 апреля 2009

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 января 2013
public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
0 голосов
/ 06 мая 2009

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

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

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

...