Я активно использую L2S в своем текущем веб-проекте, и я считаю, что самое большое зависание, которое вы найдете, - это противоречивая документация, касающаяся лучшего способа разработки n-уровневой базы данных.
Прежде всего, что вам нужно реализовать заранее, объекты DataContext предназначены для работы только до тех пор, пока единица работы , точка. Кроме того, DataContext не имеют состояния. Как только вы овладеете этими двумя принципами, использование LINQ в многоуровневой среде начнет работать хорошо.
С другой стороны, вы увидите множество людей, рекомендующих некоторые очень и очень плохие способы использования Linq. НИКОГДА не делайте ваш DataContext статичным, это ошибка, которую я сделал на раннем этапе, и она творит чудеса, пока она не работает, тогда это было абсолютно ужасно с неправильным пересечением данных между различными сессиями и т. Д. Проще говоря, это, пожалуй, самая большая самое гигантское нет-нет использования Linq и должно быть написано большими жирными буквами в каждом документе. Кроме того, сохранение DataContext в переменной Session также является плохой идеей.
Единственная серьезная неприятность, с которой я столкнулся при работе с LINQ, заключается в том, что при отключенном обновлении необходимо использовать один и тот же DataContext для всего вызова. Например:
public static void UpdateUser(UserLibrary.User user) {
using (UserLibraryDataContext dc = new UserLibraryDataContext(_conStr))
{
UserLibrary.User newUser = (from user2 in dc.Users where user2.UserID == user.UserID select user2).FirstOrDefault();
newUser.Email = user.Email;
newUser.FirstName = user.FirstName;
newUser.LastName = user.LastName;
dc.SubmitChanges();
}
Вы не можете просто передать пользователя, созданного в другом текстовом тексте, и ожидать, что обновление будет работать, если только вы не установите DataContext.ObjectTrackingEnabled = false, что я бы не рекомендовал. Вместо этого в том же DataContext вы должны извлечь существующий объект, обновить его значения, а затем отправить эти изменения. Храните все похожие задачи в одном DataContext.
Я бы порекомендовал L2S, хотя, как только вы решите несколько проблем (например, выше), это отличная технология и определенно сэкономит время. Однако я бы порекомендовал сделать тонкую обертку вокруг вашего DAL, чтобы вы могли легко измениться. Я рассматриваю (по экономическим причинам) портирование части моего кода для использования OpenAccess ORM -> MySql для части моего доступа к данным, и с правильно определенным уровнем эта задача займет у меня всего несколько часов.