Я, кажется, не получаю вопросы LINQ2SQL назад с мини-профилировщиком?

У меня есть 2 веб-приложения ряда. DataAccess и WebSite.

Таким образом в моем dataContext.cs на ряде DataAccess я добавил обертку...

  //The autogenreated context when I made the linq2sql class
  public static MyDataContext DataContext
    {
        get
        {
            //We are in a web app, use a request scope
            if (HttpContext.Current != null)
            {
                if (HttpContext.Current.Items["dc"] == null)
                {
                    MyDataContext dc = new MyDataContext ();
                    HttpContext.Current.Items["dc"] = dc;
                    return dc;
                }
                else
                    return (MyDataContext )HttpContext.Current.Items["dc"];
            }
            else
            {
                if (dataContext == null)
                    dataContext = new MyDataContext ();



                return dataContext;
            }
        }
    }

    //the method I added to the autogenreated contex in 
    //an attempt to wrap the profiler around it
    public static MyDataContext Get()
    {
        var sqlConnection = new MyDataContext().Connection;
        var profiledConnection = new StackExchange.Profiling.Data.ProfiledDbConnection(sqlConnection, MiniProfiler.Current);

        return new MyDataContext(profiledConnection);
    }

Таким образом, это - то, на что похож profileConnection, когда это называют, но перед возвращение Новый MyDataContext (porofiledConnection)

enter image description here

and in my business logic also in the DataAccess tier I made sure that the db context is all created with db = MyDataContext.Get() in stead of db = new MyDataContext();

public class MyOrders(){
  private static  MyDataContext db = MyDataContext.Get();

  public static List GetOrderHistory(){
      var = db.MyStoredProcedure(args) //Inspecting here before execution
      //proces result and return list of model
      }

 }

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

enter image description here

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

enter image description here

Я пропускал что-то? SQL припрятался про запас? Я всегда хочу видеть SQL даже если тайники Linq2Sql это или что бы то ни было. Что я делал неправильно?

1
nl ja de
Есть только один dbml , у которого есть весь SP' s и только SP' s. Мы на самом деле не выбираем данные, используя linq. Это затрагивает его? Мне просто интересно, сколько времени SP берет, чтобы выполнить причину, это находится на удаленном сервере. Я обновил вопрос немного с большим количеством деталей
добавлено автор ppumkin, источник
@Alex хорошо я сделал это. Получил conString от web.config и нового SqlConnection. Первая страница laod показала мне ! дублируют SQL.. Я нажал F5 - больше Раз SQL? Я знаю от отладки, это действительно все еще становится названным дважды! Я проверил db, и он все еще использует представленную связь на всех освежительных напитках?! PS - Все мои классы там статичны.. это плохо?
добавлено автор ppumkin, источник
Хорошо Хорошо я понял что-то. Если я останавливаю свой dev-env-server, и ре управляют проектом, самая первая страница показывает мне 1 коробку - с SQL, который я ищу! НА самом первом освежительном напитке это придумывает несколько коробок и времени, но больше раз SQL? Я останавливаю devenv. пробег ре проект то же самое ваш снова... ха?
добавлено автор ppumkin, источник
О, Krikey! @Alex Вы я вынул статический datacontext, и создайте его в каждом требовании как член парламента, не занимающий официального поста... Это работает каждый раз теперь. Цветущий Айсберг!? Почему?! Каково различие. Вы хотите опубликовать ответ?
добавлено автор ppumkin, источник
Просто предположение, попытайтесь создать свой контекст данных не при помощи other' s связь контекста: как вар profiledConnection = новый ProfiledDbConnection (новый SqlConnection (ConnectionString), MiniProfiler. Ток); . Другая вещь - почему вам нужен статический контекст данных в вашем MyProducts класс?
добавлено автор Alex, источник
Контекст данных shouldn' t быть статичным. Также ваше статическое DataContext собственность doesn' t используют представленную связь.
добавлено автор Alex, источник
a: действительно ли вы уверены, что это , делающий доступ к данным? И если это: b: вы получали контекст данных через служебный метод, который вы показываете в верхней части страницы? действительно ли возможно, что есть некоторый другой код, который создает контексты данных?
добавлено автор Marc Gravell, источник
то, что я имею в виду: действительно ли возможно, что какой-либо код просто делает свое собственное новый MyDataContext (...) ? Хотя я должен сказать: создание контекста данных только, чтобы получить связь опасно - и даже не гарантируемый работать: у контекста данных есть странные правила о том, когда он располагает связь, если он думает, что владеет им. Лично, I' d принести строку подключения самостоятельно снаружи контекста данных, и затем формировать эти две связи (прямой и обернутый), и наконец создают контекст данных, проходя в представленной связи
добавлено автор Marc Gravell, источник

1 ответы

У вас есть статический контекст данных в вашем MyOrders класс. <у кода> DataContext есть внутренний тайник внутри, чтобы отследить изменения предприятий и избежать цикла обработки к базе данных в одной деловой сделке. Держа его как статичный, внутренний тайник средств будет увеличиваться в настоящее время и не выпущен правильно. Это может быть причиной исчезнувших вопросов в профилировщике. Также можно столкнуться с проблемой, когда многочисленные пользователи получат доступ к тому же самому контексту от многократных нитей, и вероятно утечкам памяти.

Примечание от MSDN:

В целом DataContext случай разработан, чтобы продлиться одну "единицу из работы", однако, ваше заявление определяет тот термин. DataContext легкий вес и не дорогой, чтобы создать. Типичный LINQ к SQL применение создает DataContext случаи в объеме метода или как a член недолгих классов, которые представляют логический набор связанных операции по базе данных.

один еще:

Не пытайтесь снова использовать случаи DataContext . Каждый DataContext поддерживает государство (включая тайник идентичности) для одной детали редактируйте/подвергайте сомнению сессию. Получить новые случаи на основе текущего состояния из базы данных используйте новое DataContext .

Больше деталей можно найти в статье Рика Страля Linq управлению целой жизнью SQL DataContext.

2
добавлено
Большое спасибо. Я не понял, что сделал вполне серьезную проблему, делая это статичным. Я переместил его в единственные сделки теперь, и профилировщик работает отлично. Спасибо за вас время +1 +beer
добавлено автор ppumkin, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)