2009-10-14 3 views
2

Я новый программист asp.net, и я просто спросил this question, который оставил меня более общим.Рекомендации по объекту Linq/data

Каковы текущие лучшие практики в отношении объектов Linq и данных? В частности, когда; тусклые, новые и распоряжаться ими.

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

Если кто-то может дать мне примечания об утешении в соответствии с лучшими практиками или даже ссылку на статью, которая их описывает, я был бы очень признателен.

ответ

0

Как правило, вы хотите передавать данные в качестве параметров функций и зависимостей типов в качестве аргументов конструктора. Так, например, контекст данных linq, вероятно, будет чем-то, что ваш тип зависит от работы, и поэтому должен быть введен в конструктор. Значения, используемые для поиска данных в вашем контексте, будут быстро меняться и будут использоваться повторно для одного и того же контекста и, следовательно, будут функциональными параметрами вашего типа.

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

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

2

Quickie мысли (я сидел на встрече, так плохо мне)

Для ASP.NET, максимальное время жизни контекста данных является один пост или постбэк. Вы можете создать больше, чем это, но они все умрут при разгрузке страницы. Да, вы должны распоряжаться ими явно; что используя оператор не лучший способ справиться с этим, потому что она автоматически выбрасывайте, когда блок заканчивается:

using (NorthwindModel nw = new NorthwindModel()) 
{ 
    do stuff 
} 

данных, который вернулся из запроса LINQ не исчезает с контекстом данных, но на тот момент это уже не связанные с контекстом, и изменения не могут быть использованы для обновления базы данных. (Вы всегда можете создать новый контекст, затем добавить новый объект или повторно запросить и слить изменения или что-то, что соответствует вашим потребностям.)

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

  1. Обработать результаты запроса внутри блока использования контекста данных.
  2. Force запрос выполнить, как правило, с .ToList() или каким-либо другим способом, который будет генерировать набор данных:

    Список myCustomers = (от с в nw.Customers выберите с).К списку();

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

Если вы выполняете CRUD с LINQ, рекомендуется использовать один контекст данных для всех обновлений, удалений и вставок, а затем вызвать SubmitChanges() один раз для всех изменений. Это гарантирует, что они выполняются как одна транзакция. (Контекст данных будет генерировать транзакцию для каждого вызова SubmitChanges, если транзакция уже не запущена.)

Если вы хотите выбрать один элемент в запросе, используйте FirstOrDefault(), а не First(). First() будет выбрасывать и исключать, если ничто не соответствует критериям выбора, а FirstOrDefault() возвращает null. Очень полезно знать.

Помимо этого, получайте удовольствие и попробуйте множество вещей. LINQ изменит то, как вы думаете о данных.

 Смежные вопросы

  • Нет связанных вопросов^_^