В каких случаях мне нужно использовать ключевые слова CREATEREF, DEREF и REF? - PullRequest
1 голос
/ 04 марта 2012

Этот вопрос о том, почему я бы использовал вышеупомянутые ключевые слова.Я нашел много страниц MSDN, которые объясняют как.Я ищу причину.

Какой запрос я бы попытался написать, что означает, что они мне нужны?Я спрашиваю, потому что примеры, которые я нашел, кажутся достижимыми другими способами ...

Чтобы попытаться выяснить это самостоятельно, я создал очень простую модель сущности, используя таблицы Employee и EmployeePayHistory из базы данных AdventureWorks.

Один пример, который я видел в сети, продемонстрировал нечто похожее на следующий Entity SQL:

SELECT VALUE
    DEREF(CREATEREF(AdventureWorksEntities3.Employee, row(h.EmployeeID))).HireDate
FROM 
    AdventureWorksEntities3.EmployeePayHistory as h

Кажется, это откатывает HireDate без указания соединения?

Почемуэто лучше, чем приведенный ниже SQL (который, по-видимому, делает то же самое)?

SELECT VALUE
    h.Employee.HireDate
FROM 
    AdventureWorksEntities3.EmployeePayHistory as h

Глядя на два приведенных выше оператора, я не могу понять, какой дополнительный бит CREATEREF, DEREF добавляет, посколькуКажется, я могу достичь того, чего хочу, без них.

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

Чего я не могу найти, так это сценариев ....

Кто-нибудь может заполнить пробел?Мне не нужны целые наборы SQL.Мне просто нужна начальная точка, чтобы поиграть, т.е. краткое описание сценария или двух ... Я сам могу это расширить.

Ответы [ 2 ]

1 голос
/ 11 августа 2012

TL; DR - REF / DEREF аналогичны указателям C ++. Если это ссылки на постоянные сущности (не сущности, которые не были сохранены в источнике данных).

Зачем вам использовать такую ​​вещь ?: Ссылка на объект использует меньше памяти, чем объект с DEFEF (или расширенный, или заполненный, или созданный). Это может пригодиться, если у вас есть куча записей, которые содержат информацию об изображении и данные об изображении (файлы 4 ГБ, хранящиеся в базе данных). Если вы не использовали REF и отбросили 10 из этих сущностей только для получения метаданных изображения, то вы быстро заполнили бы свою память.

Я знаю, я знаю. Было бы проще просто получить метаданные в вашем запросе, но тогда вы потеряете смысл того, для чего REF хорош: -D

1 голос
/ 30 июля 2012

Посмотрите на это сообщение

Одним из преимуществ ссылок является то, что его можно рассматривать как «легковесную» сущность, в которой нам не нужно тратить ресурсы на создание и поддержание полного состояния / значений сущности до тех пор, пока это не станет действительно необходимым. Если у вас есть ссылка на объект, вы можете разыменовать его, используя выражение DEREF или просто вызывая свойство объекта

...